框架不是框框—應(yīng)用框架的基本思想

字號:

軟件構(gòu)件化是21世紀(jì)軟件工業(yè)發(fā)展的大勢趨。工業(yè)化的軟件復(fù)用已經(jīng)從通用類庫進(jìn)化到了面向領(lǐng)域的應(yīng)用框架。Gartner Group認(rèn)為:“到2003年,至少70%的新應(yīng)用將主要建立在如軟件構(gòu)件和應(yīng)用框架這類‘構(gòu)造塊’之上;應(yīng)用開發(fā)的未來就在于提供一開放體系結(jié)構(gòu),以方便構(gòu)件的選擇、組裝和集成”??蚣艿闹赜靡殉蔀檐浖a(chǎn)中的重用方式之一。然而——
    一、構(gòu)件與框架有何關(guān)系?
    1. 什么是框架?
    框架(Framework)是整個或部分系統(tǒng)的可重用設(shè)計,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實例間交互的方法;另一種定義認(rèn)為,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。前者是從應(yīng)用方面而后者是從目的方面給出的定義。
    可以說,一個框架是一個可復(fù)用的設(shè)計構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個設(shè)計、協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,表現(xiàn)為一組抽象類以及其實例之間協(xié)作的方法,它為構(gòu)件復(fù)用提供了上下文(Context)關(guān)系。因此構(gòu)件庫的大規(guī)模重用也需要框架。
    構(gòu)件領(lǐng)域框架方法在很大程度上借鑒了硬件技術(shù)發(fā)展的成就,它是構(gòu)件技術(shù)、軟件體系結(jié)構(gòu)研究和應(yīng)用軟件開發(fā)三者發(fā)展結(jié)合的產(chǎn)物。在很多情況下,框架通常以構(gòu)件庫的形式出現(xiàn),但構(gòu)件庫只是框架的一個重要部分??蚣艿年P(guān)鍵還在于框架內(nèi)對象間的交互模式和控制流模式。
    框架比構(gòu)件可定制性強(qiáng)。在某種程度上,將構(gòu)件和框架看成兩個不同但彼此協(xié)作的技術(shù)或許更好??蚣転闃?gòu)件提供重用的環(huán)境,為構(gòu)件處理錯誤、交換數(shù)據(jù)及激活操作提供了標(biāo)準(zhǔn)的方法。
    應(yīng)用框架的概念也很簡單。它并不是包含構(gòu)件應(yīng)用程序的小片程序,而是實現(xiàn)了某應(yīng)用領(lǐng)域通用完備功能(除去特殊應(yīng)用的部分)的底層服務(wù)。使用這種框架的編程人員可以在一個通用功能已經(jīng)實現(xiàn)的基礎(chǔ)上開始具體的系統(tǒng)開發(fā)??蚣芴峁┝怂袘?yīng)用期望的默認(rèn)行為的類集合。具體的應(yīng)用通過重寫子類(該子類屬于框架的默認(rèn)行為)或組裝對象來支持應(yīng)用專用的行為。
    應(yīng)用框架強(qiáng)調(diào)的是軟件的設(shè)計重用性和系統(tǒng)的可擴(kuò)充性,以縮短大型應(yīng)用軟件系統(tǒng)的開發(fā)周期,提高開發(fā)質(zhì)量。與傳統(tǒng)的基于類庫的面向?qū)ο笾赜眉夹g(shù)比較,應(yīng)用框架更注重于面向?qū)I(yè)領(lǐng)域的軟件重用。應(yīng)用框架具有領(lǐng)域相關(guān)性,構(gòu)件根據(jù)框架進(jìn)行復(fù)合而生成可運行的系統(tǒng)。框架的粒度越大,其中包含的領(lǐng)域知識就更加完整。
    2. 框架和設(shè)計模式
    框架、設(shè)計模式這兩個概念總?cè)菀妆换煜?,其實它們之間還是有區(qū)別的。構(gòu)件通常是代碼重用,而設(shè)計模式是設(shè)計重用,框架則介于兩者之間,部分代碼重用,部分設(shè)計重用,有時分析也可重用。在軟件生產(chǎn)中有三種級別的重用:內(nèi)部重用,即在同一應(yīng)用中能公共使用的抽象塊;代碼重用,即將通用模塊組合成庫或工具集,以便在多個應(yīng)用和領(lǐng)域都能使用;應(yīng)用框架的重用,即為專用領(lǐng)域提供通用的或現(xiàn)成的基礎(chǔ)結(jié)構(gòu),以獲得級別的重用性。
    框架與設(shè)計模式雖然相似,但卻有著根本的不同。設(shè)計模式是對在某種環(huán)境中反復(fù)出現(xiàn)的問題以及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執(zhí)行或復(fù)用,而對模式而言只有實例才能用代碼表示;設(shè)計模式是比框架更小的元素,一個框架中往往含有一個或多個設(shè)計模式,框架總是針對某一特定應(yīng)用領(lǐng)域,但同一模式卻可適用于各種應(yīng)用。可以說,框架是軟件,而設(shè)計模式是軟件的知識。
    二、為什么要進(jìn)行框架開發(fā)?
    框架的好處就是重用。面向?qū)ο笙到y(tǒng)獲得的的復(fù)用方式就是框架,一個大的應(yīng)用系統(tǒng)往往可能由多層互相協(xié)作的框架組成。
    由于框架能重用代碼,因此從一已有構(gòu)件庫中建立應(yīng)用變得非常容易,因為構(gòu)件都采用框架統(tǒng)一定義的接口,從而使構(gòu)件間的通信簡單。
    框架能重用設(shè)計。它提供可重用的抽象算法及高層設(shè)計,并能將大系統(tǒng)分解成更小的構(gòu)件,而且能描述構(gòu)件間的內(nèi)部接口。這些標(biāo)準(zhǔn)接口使在已有的構(gòu)件基礎(chǔ)上通過組裝建立各種各樣的系統(tǒng)成為可能。只要符合接口定義,新的構(gòu)件就能插入框架中,構(gòu)件設(shè)計者就能重用構(gòu)架的設(shè)計。
    采用框架技術(shù)進(jìn)行軟件開發(fā)的主要特點包括:
    領(lǐng)域內(nèi)的軟件結(jié)構(gòu)一致性好;
    建立更加開放的系統(tǒng);
    重用代碼大大增加,軟件生產(chǎn)效率和質(zhì)量也得到了提高;
    軟件設(shè)計人員要專注于對領(lǐng)域的了解,使需求分析更充分;
    存儲了經(jīng)驗,可以讓那些經(jīng)驗豐富的人員去設(shè)計框架和領(lǐng)域構(gòu)件,而不必限于低層編程;
    允許采用快速原型技術(shù);
    有利于在一個項目內(nèi)多人協(xié)同工作;
    大粒度的重用使得平均開發(fā)費用降低,開發(fā)速度加快,開發(fā)人員減少,維護(hù)費用降低,而參數(shù)化框架使得適應(yīng)性、靈活性增強(qiáng)。
    三、與框架相關(guān)的概念
    1. 白盒與黑盒框架
    框架可分為白盒(White-Box)與黑盒(Black-Box)兩種框架。
    基于繼承的框架被稱為白盒框架。所謂白盒即具備可視性,被繼承的父類的內(nèi)部實現(xiàn)細(xì)節(jié)對子類而言都是可知的。利用白盒框架的應(yīng)用開發(fā)者通過衍生子類或重寫父類的成員方法來開發(fā)系統(tǒng)。子類的實現(xiàn)很大程度上依賴于父類的實現(xiàn),這種依賴性限制了重用的靈活性和完全性。但解決這種局限性的方法可以是只繼承抽象父類,因為抽象類基本上不提供具體的實現(xiàn)。白盒框架是一個程序骨架,而用戶衍生出的子類是這個骨架上的附屬品。
    基于對象構(gòu)件組裝的框架就是黑盒框架。應(yīng)用開發(fā)者通過整理、組裝對象來獲得系統(tǒng)的實現(xiàn)。用戶只須了解構(gòu)件的外部接口,無須了解內(nèi)部的具體實現(xiàn)。另外,組裝比繼承更為靈活,它能動態(tài)地改變,繼承只是一個靜態(tài)編譯時的概念。
    在理想情況下,任何所需的功能都可通過組裝已有的構(gòu)件得到,事實上可獲得的構(gòu)件遠(yuǎn)遠(yuǎn)不能滿足需求,有時通過繼承獲得新的構(gòu)件比利用已有構(gòu)件組裝新構(gòu)件更容易,因此白盒和黑盒將同時應(yīng)用于系統(tǒng)的開發(fā)中。不過白盒框架趨向于向黑盒框架發(fā)展,黑盒框架也是系統(tǒng)開發(fā)希望達(dá)到的理想目標(biāo)。
    2. 熱點、食譜以及好萊塢原則
    成功的框架開發(fā)需要確定領(lǐng)域?qū)S玫摹盁狳c” (Hot spot)。應(yīng)用開發(fā)者在框架的基礎(chǔ)上進(jìn)行開發(fā),只須擴(kuò)展框架的某些部分,“熱點”就是在應(yīng)用領(lǐng)域的一種擴(kuò)展槽,開發(fā)者根據(jù)自己的需要填充這些擴(kuò)展槽。“熱點”使框架具有靈活性,如在具體的實現(xiàn)中,擴(kuò)展槽可以被看成是一些抽象類,開發(fā)者通過重寫抽象方法獲得具體實現(xiàn)。
    “食譜” (Cookbook)就是描述如何使用框架方法的文檔。在“食譜”中包含了許多“烹飪”方法,這些“烹飪”方法相當(dāng)于一些具體的操作步驟,描述了為解決某一專門問題如何使用框架的詳細(xì)方法??蚣艿膬?nèi)部設(shè)計和實現(xiàn)細(xì)節(jié)通常不出現(xiàn)在“食譜”中。
    框架的一個重要特征就是用戶定義的方法經(jīng)常被框架自身調(diào)用,而不是從用戶的應(yīng)用代碼中調(diào)用。這種機(jī)制常稱為“好萊塢原則”(Hollywood Principle)或“別調(diào)用我們,我們會調(diào)用您”。