框架不是框框—應用框架的基本思想


 

 

軟件構件化是21世紀軟件工業發展的大勢趨。工業化的軟件複用已經從通用類庫進化到了面向領域的應用框架。Gartner Group認爲:“到2003年,至少70%的新應用將主要建立在如軟件構件和應用框架這類‘構造塊’之上;應用開發的未來就在於提供一開放體系結構,以方便構件的選擇、組裝和集成”。框架的重用已成爲軟件生產中最有效的重用方式之一。然而——

一、構件與框架有何關係?

1. 什麼是框架?

框架(Framework)是整個或部分系統的可重用設計,表現爲一組抽象構件及構件實例間交互的方法;另一種定義認爲,框架是可被應用開發者定製的應用骨架。前者是從應用方面而後者是從目的方面給出的定義。

可以說,一個框架是一個可複用的設計構件,它規定了應用的體系結構,闡明瞭整個設計、協作構件之間的依賴關係、責任分配和控制流程,表現爲一組抽象類以及其實例之間協作的方法,它爲構件複用提供了上下文(Context)關係。因此構件庫的大規模重用也需要框架。

構件領域框架方法在很大程度上借鑑了硬件技術發展的成就,它是構件技術、軟件體系結構研究和應用軟件開發三者發展結合的產物。在很多情況下,框架通常以構件庫的形式出現,但構件庫只是框架的一個重要部分。框架的關鍵還在於框苣詼韻蠹淶慕換ツJ膠塗刂屏髂J健?

框架比構件可定製性強。在某種程度上,將構件和框架看成兩個不同但彼此協作的技術或許更好。框架爲構件提供重用的環境,爲構件處理錯誤、交換數據及激活操作提供了標準的方法。

應用框架的概念也很簡單。它並不是包含構件應用程序的小片程序,而是實現了某應用領域通用完備功能(除去特殊應用的部分)的底層服務。使用這種框架的編程人員可以在一個通用功能已經實現的基礎上開始具體的系統開發。框架提供了所有應用期望的默認行爲的類集合。具體的應用通過重寫子類(該子類屬於框架的默認行爲)或組裝對象來支持應用專用的行爲。

應用框架強調的是軟件的設計重用性和系統的可擴充性,以縮短大型應用軟件系統的開發週期,提高開發質量。與傳統的基於類庫的面向對象重用技術比較,應用框架更注重於面向專業領域的軟件重用。應用框架具有領域相關性,構件根據框架進行復合而生成可運行的系統。框架的粒度越大,其中包含的領域知識就更加完整。

2. 框架和設計模式

框架、設計模式這兩個概念總容易被混淆,其實它們之間還是有區別的。構件通常是代碼重用,而設計模式是設計重用,框架則介於兩者之間,部分代碼重用,部分設計重用,有時分析也可重用。在軟件生產中有三種級別的重用:內部重用,即在同一應用中能公共使用的抽象塊;代碼重用,即將通用模塊組合成庫或工具集,以便在多個應用和領域都能使用;應用框架的重用,即爲專用領域提供通用的或現成的基礎結構,以獲得最高級別的重用性。

框架與設計模式雖然相似,但卻有着根本的不同。設計模式是對在某種環境中反覆出現的問題以及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執行或複用,而對模式而言只有實例才能用代碼表示;設計模式是比框架更小的元素,一個框架中往往含有一個或多個設計模式,框架總是針對某一特定應用領域,但同一模式卻可適用於各種應用。可以說,框架是軟件,而設計模式是軟件的知識。

二、爲什麼要進行框架開發?

框架的最大好處就是重用。面向對象系統獲得的最大的複用方式就是框架,一個大的應用系統往往可能由多層互相協作的框架組成。

由於框架能重用代碼,因此從一已有構件庫中建立應用變得非常容易,因爲構件都採用框架統一定義的接口,從而使構件間的通信簡單。

框架能重用設計。它提供可重用的抽象算法及高層設計,並能將大系統分解成更小的構件,而且能描述構件間的內部接口。這些標準接口使在已有的構件基礎上通過組裝建立各種各樣的系統成爲可能。只要符合接口定義,新的構件就能插入框架中,構件設計者就能重用構架的設計。

框架還能重用分析。所有的人員若按照框架的思想來分析事務,那麼就能將它劃分爲同樣的構件,採用相似的解決方法,從而使採用同一框架的分析人員之間能進行溝通。

採用框架技術進行軟件開發的主要特點包括:

領域內的軟件結構一致性好;

建立更加開放的系統;

重用代碼大大增加,軟件生產效率和質量也得到了提高;

軟件設計人員要專注於對領域的瞭解,使需求分析更充分;

存儲了經驗,可以讓那些經驗豐富的人員去設計框架和領域構件,而不必限於低層編程;

允許採用快速原型技術;

有利於在一個項目內多人協同工作;

大粒度的重用使得平均開發費用降低,開發速度加快,開發人員減少,維護費用降低,而參數化框架使得適應性、靈活性增強。

三、與框架相關的概念

1. 白盒與黑盒框架

框架可分爲白盒(White-Box)與黑盒(Black-Box)兩種框架。

基於繼承的框架被稱爲白盒框架。所謂白盒即具備可視性,被繼承的父類的內部實現細節對子類而言都是可知的。利用白盒框架的應用開發者通過衍生子類或重寫父類的成員方法來開發系統。子類的實現很大程度上依賴於父類的實現,這種依賴性限制了重用的靈活性和完全性。但解決這種侷限性的方法可以是隻繼承抽象父類,因爲抽象類基本上不提供具體的實現。白盒框架是一個程序骨架,而用戶衍生出的子類是這個骨架上的附屬品。

基於對象構件組裝的框架就是黑盒框架。應用開發者通過整理、組裝對象來獲得系統的實現。用戶只須瞭解構件的外部接口,無須瞭解內部的具體實現。另外,組裝比繼承更爲靈活,它能動態地改變,繼承只是一個靜態編譯時的概念。

在理想情況下,任何所需的功能都可通過組裝已有的構件得到,事實上可獲得的構件遠遠不能滿足需求,有時通過繼承獲得新的構件比利用已有構件組裝新構件更容易,因此白盒和黑盒將同時應用於系統的開發中。不過白盒框架趨向於向黑盒框架發展,黑盒框架也是系統開發希望達到的理想目標。

2. 熱點、食譜以及好萊塢原則

成功的框架開發需要確定領域專用的“熱點” (Hot spot)。應用開發者在框架的基礎上進行開發,只須擴展框架的某些部分,“熱點”就是在應用領域的一種擴展槽,開發者根據自己的需要填充這些擴展槽。“熱點”使框架具有靈活性,如在具體的實現中,擴展槽可以被看成是一些抽象類,開發者通過重寫抽象方法獲得具體實現。

“食譜” (Cookbook)就是描述如何使用框架方法的文檔。在“食譜”中包含了許多“烹飪”方法,這些“烹飪”方法相當於一些具體的操作步驟,描述了爲解決某一專門問題如何使用框架的詳細方法。框架的內部設計和實現細節通常不出現在“食譜”中。

框架的一個重要特徵就是用戶定義的方法經常被框架自身調用,而不是從用戶的應用代碼中調用。這種機制常稱爲“好萊塢原則”(Hollywood Principle)或“別調用我們,我們會調用您”。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章