基於構件開發的應用框架設計

gjd111686發表於2004-08-03
基於構件開發的應用框架設計
--------------------------------------------------------------------------------
 
  框架必須是健壯的、可擴充套件的、靈活的,且支援動態內容,它要求基於開放或共享標準。框架的設計要力求做到:完備性、靈活性、可擴充套件性、可理解性,同時抽象能用於不同的場合;使用者能輕鬆地新增和修改功能,定製框架;使用者和框架的互動清晰,文件齊全。框架設計的一個核心問題就是發現可重用的設計和“熱點”,以保證框架具備充分的靈活性,使使用者能在已有構件的基礎上生成應用程式,實現“零程式碼編寫”的理想目標。
一、如何設計應用框架?
  目前在框架設計方面成熟的技術較少,大體可分為兩類:實踐法與系統法。
1. 實踐法
  許多專家甚至認為框架不可能是系統設計的結果,而只是在從底向上設計中的一個結果。實踐法也可以說是例項(Example)驅動的設計方法,它是從若干個具體的典型應用中,抽象出相似點來構建框架,框架反過來又應用於不同的問題,並在解決不同問題的過程中得到更新,在框架的設計和實現的兩步中,不斷反覆。等到框架逐漸成熟時,需要修改和反覆的內容就會越來越少。
  具體步驟為:
  分析問題領域,確定所需框架。從一類應用而不是單個的程式去分析、比較各種不同的軟體解決方案,尋求這些方案的共性和每個程式的唯一性特徵。這些共性,尤其是那些經常被多個程式使用的部分將成為框架的基礎。然後定義框架體系結構並設計,包括設計使用者與框架間的互動、給使用者提供的最終工具等。
  框架的實現。包括框架核心類的實現、框架的測試、框架的試執行、框架的反覆更新。
  框架的部署。包括文件的提供、分發過程,為使用者提供技術支援,維護和更新框架。
  這種方法也就是先在具體類基礎上進行泛化,提取出抽象類。抽象化也是框架開發的一個關鍵。不過,根據這種方法設計出的框架的可適用性很大程度上依賴於其基於的具體應用。
  由於框架的開發具有反覆性,且需要深入瞭解應用領域,因此框架的開發很難按進度表進行。框架的設計者也需要和應用開發者緊密合作,因為框架只有在使用它開發應用的過程中才能發現其哪些部分有待改進。
2. 系統法
  由於有人認為框架的設計也可以通過系統的方法得到,因此人們提出了逐步泛化的框架設計方法。此時框架的設計分兩步:
  第一步是問題的泛化。它要求解決如下問題:問題領域中的哪些概念可以表現為變數,並且需要統一處理?是否可以發現一些具體的概念,它們能被泛化為一個更抽象的概念?
  第二步是框架的設計。在這一步中,泛化是從反向考慮,以實現每一級的框架。換言之,最先實現最通用的框架,然後實現次通用的框架,以此類推。如圖1所示, 其中,框架0就是最終要實現的框架。
  這一步需要解決如下問題:系統的哪一部分可能需要改變?使用者需要在什麼地方向框架中加入自己的程式碼?
  採用兩步的設計方法可以避免在早期的開發過程中侷限於應用專用的類和體系結構,並且有利於使用通用的設計模式。
  框架的設計是一個反覆的過程,在這個過程中需要領域和設計兩方面的專家意見,框架使用者和框架開發者之間的交流對框架的設計也很重要,因為框架是在不斷反覆的過程中逐步成熟的。
3. 框架設計與應用設計
  框架的設計和應用的設計到底有何不同?一般而言,兩者的側重點不同。設計應用系統時,要求對專用領域的重要概念有深入的瞭解。這些概念通過建模演變成類,並作為實現整個應用的構建塊。而設計框架時,重點在識別出必須具備靈活性的地方,也就是“熱點”,這也是框架的關鍵所在。
  構件庫系統基於框架而不是具體的類,使得構件庫系統的使用更具靈活性。但在框架基礎上構建具體的應用時, 類的使用和開發總是隨之而來,在框架上生成應用可以通過建立子類、配置各構件物件、調整例項等來獲得。
4. 框架文件
  文件必須包括如下內容:框架的目的,如何使用框架,框架的設計細節等。
二、框架採用哪些支援工具?
  一般而言,沒有支援工具的框架很難被使用。任何一個框架的提出總是配有一系列工具軟體,這樣基於框架的應用開發才切實可行。這些工具允許使用者與應用框架互動、配置和構築新的應用。下列工具通常被使用:
  瀏覽工具 使用者可以利用它瀏覽框架的類層次結構等資訊。
  編輯工具 使用者用來調整和修改框架元素的屬性等,如修改類或構件等。
  幫助系統 為使用者使用本框架系統提供嚮導功能,如可以採用HTML格式。
  測試系統 用來測試生成的應用系統,通常支援模擬操作。
  文件工具 幫助建立應用系統的文件,如Javadoc工具。理解並學會使用框架是一件費時的工作,這也是框架設計方法的唯一不足之處,因此要求框架的文件必須齊備。
  配置管理工具 使用框架而不是具體的物件雖然提供了複用性,但它同時也帶來了開發上的複雜性。框架內包含各種構件或構件庫,一個框架可能需要和其他框架通訊。一個框架也可能由其他子框架系統組成,這樣一種組成結構必然提出配置管理的問題。例如,如何在多個框架內共享構件?如何由構件或子框架組裝新框架?框架內的構件如何通訊與協作?不同的框架間如何互動?
  使用這些高階工具的最終目的就是減少編碼和記憶的工作量,簡化使用者的操作。理想情況下,使用者可以不用編一句程式碼而實現新系統的構建。例如,在一視覺化介面上,通過選取一些圖示就能生成可執行程式。目前已有一些類似的工具,如University of Geneva開發的Vista系統。
三、都有哪些著名的框架系統?
  目前有許多框架系統,例如使用者介面方面的框架有MVC、ET++等,其中ET++採用C++語言實現,執行於Unix等系統中;針對其他領域的則有FOIBLE、MacApp、FACE (Framework Adaptive Composition Environment)等。
  早期一些框架系統多采用傳統的程式導向語言實現,現在面嚮物件語言為軟體和設計的重用提供了更強有力的支援。由於框架開發的學習曲線較複雜,因此框架開發的語言最好能對框架的文件建立提供有效的方法;框架的使用要求開發語言具備高可移植性;框架的設計其實也是一些高層的決策,很自然採用高階語言來實現。Java語言由於具有平臺獨立性以及輕量級的連結過程、自動垃圾回收、簡單語言結構、標準軟體包、物件導向等特性,因此可以說Java是進行框架構築的合適語言。現在市場上已出現了許多采用Java語言編寫的框架系統。
  LEC India Software Centre Pvt. Ltd.公司研製了一個面向EJB 構件的應用框架系統。它主要面向基於EJB的應用程式,是一個伺服器端的框架,能在EJB構件的開發中解決穩定性以及其他一些企業級的特性等問題。
  現在又出現了許多采用J2EE程式設計環境的應用框架,如Pacific技術服務公司開發的一套多層框架,能用來開發Web應用伺服器;Jcorporate公司開發的Expresso Framework是一使用java來建造分散式、重用、基於構件的安全的Web應用程式的應用框架。
四、 如何設計知識工程應用框架?
  在知識爆炸的時代,如何從資料中提取資訊,從資訊中提取知識已成為一個重要的應用領域。越來越多的知識處理應用系統急待開發,若能有一個成熟可靠的知識處理框架系統,將大大加快此類應用系統的開發。針對這種情況,清華大學知識工程研究室結合自己的經驗,目前提出了在知識工程應用領域的框架,主要針對網路計算模式下的知識獲取、傳輸、管理和應用,基於Web的資料探勘與知識發現等內容,所有的程式碼均採用Java實現。
  將應用框架結構化為框架的框架,劃分為如下三個子框架:
  (1) 領域專用構件框架:提供領域專用的構件模型集合,併為分層的構件模型提供統一介面。
  (2) 視覺化組裝框架:提供整個框架系統的圖形化介面,併為視覺化組裝和操作構件提供工具。
  (3) 連線框架:為構件間的互動、通訊提供機制。
  框架內各構件的分佈如圖2所示。
  建立的基於框架的構件系統具有如下效能:
  實現面向產品化、實用性的構件庫系統,並具開放性、可擴充套件性;
  支援異構環境中的框架、構件的互聯和通訊;
  實現新舊系統的相容性;
  提供一致的介面分配;
  遵循重要構件標準(如CORBA);
  構件具有透明本地化、平臺無關性特點;
  系統的配置、資料交換基於XML和Java的標準化格式;
  支援個性化資訊服務定製和可重構。
  良好的使用者學習曲線。
  框架的設計本身也是一個迴圈迭代的過程,它在不斷應用於實踐的過程中,得到更新和提高。我們也在不斷的完善這套系統。目前一些公用構件如電子表單自動生成系統、資料提取和檔案轉換系統等作為大粒度構件已得到廣泛使用。
  框架能使應用程式的開發簡單,價格低廉,但是開發框架不是一件容易的事。它是一個需要領域和設計經驗的反覆過程。為了保證框架的靈活性,必須提取和發現熱點。設計模式可以簡化這個過程,因為它提供了對過去經驗的抽象。應用框架能高度抽象同一領域內的問題,進而降低開發難度和強度。雖然框架和構件技術已經出現許多年了,開始走入實用,但還不成熟,有大量問題有待研究。

相關文章