直觀地說,軟件架構(gòu)復(fù)用就是在軟件的架構(gòu)層設(shè)計中套用現(xiàn)有的優(yōu)勢架構(gòu)。軟件架構(gòu)復(fù)用可基于特定的軟件開發(fā)工具(平臺),因為它們具有一定的積累功能;也可基于特定應(yīng)用領(lǐng)域,如電子政務(wù)、電子商務(wù),因為同一應(yīng)用領(lǐng)域的軟件系統(tǒng)具有相似的功能需求。
軟件架構(gòu)復(fù)用不僅可以提高軟件開發(fā)的效率,也有利于軟件系統(tǒng)開發(fā)的標(biāo)準(zhǔn)化。此外,共享公共架構(gòu)還有利于軟件系統(tǒng)之間的互操作。軟件架構(gòu)復(fù)用的成功案例使得人們開始關(guān)注軟件架構(gòu)與業(yè)務(wù)邏輯之間的相對獨立性。通常架構(gòu)主要解決構(gòu)件的接口匹配問題和構(gòu)件間的通信問題,而業(yè)務(wù)邏輯則主要決定構(gòu)件的操作內(nèi)容。這意味著我們可以分別完成架構(gòu)與業(yè)務(wù)邏輯的設(shè)計與開發(fā),再把兩個結(jié)果合并起來。粗略地說,這就是面向架構(gòu)的軟件開發(fā)。面向架構(gòu)的軟件開發(fā)可能有不同的實現(xiàn)步驟。舉個例子,我們可以先采用架構(gòu)設(shè)計語(ArchitecturalDesignLanguage, ADL) 完成軟件架構(gòu)設(shè)計,再對其進行編譯,編譯器的輸出將包括構(gòu)件骨架代碼(源碼)和連接器代碼等。在完成架構(gòu)的設(shè)計與編譯之后,就可以向構(gòu)件骨架代碼中加入操作代碼,形成最終的編程結(jié)果。
伴隨著軟件產(chǎn)業(yè)的發(fā)展使可復(fù)用、具有某種優(yōu)勢的架構(gòu)及上述實現(xiàn)架構(gòu)代碼的逐漸被固定,使其商業(yè)化,這就是最原始的軟件框架(frarnework)它實際上是-種軟件半成品,允許客戶添加可插拔的定制構(gòu)件來滿足細化的需求。標(biāo)準(zhǔn)化是軟件框架的另一個主要的來源,如果套用圖1給出的模型,這類框架與相關(guān)標(biāo)準(zhǔn)/協(xié)議之間的關(guān)系就相當(dāng)于軟件工具與方法論之間的關(guān)系。軟件框架的第三個來源是軟件工具。實際上,許多軟件工具,特別是集成開發(fā)平臺,都為開發(fā)者提供預(yù)定義的框架,它們的特點是帶有許多自動生成的源代碼“骨架”,可以讓程序員直接在其中添加客戶化內(nèi)容。不僅如此,有的集成開發(fā)環(huán)境,例如微軟的VC++集成開發(fā)環(huán)境還能夠支持用戶通過某種面向架構(gòu)的編程來創(chuàng)建定制的框架。這些框架在開發(fā)環(huán)境中保留下來,與預(yù)定義的框架一樣可以復(fù)用。

圖1:軟件工程的工具模型
顯然,軟件框架復(fù)用與軟件架構(gòu)復(fù)用的區(qū)別在于前者的復(fù)用內(nèi)容除了架構(gòu)之外,還有代碼。實際上,軟件架構(gòu)的復(fù)用往往包含相關(guān)軟件框架的復(fù)用。如上所述,許多軟件框架就是為了固化某個架構(gòu)而專門開發(fā)的“大型積木塊”(與其想方設(shè)法去描述一個架構(gòu), 不如直接給出實現(xiàn)該架構(gòu)的關(guān)鍵代碼)。軟件框架的復(fù)用降低了復(fù)用優(yōu)勢架構(gòu)所需要的代價,也提高了軟件開發(fā)效率與開發(fā)質(zhì)量。根據(jù)框架在軟件整體架構(gòu)中所處位置的不同層次,常用的軟件框架分為支撐框架和應(yīng)用框架等。應(yīng)用框架固化的是應(yīng)用層軟件模塊的優(yōu)勢結(jié)構(gòu),如JavaEE平 臺上的Struts框架。應(yīng)用框架中分為通用框架和領(lǐng)域框架,領(lǐng)域框架只見于特定的應(yīng)用領(lǐng)域,而通用框架則適用于各種系統(tǒng)。在應(yīng)用系統(tǒng)與基礎(chǔ)設(shè)施兩只之間支撐框架起到承上啟下的作用, 支撐框架向應(yīng)用系統(tǒng)提供標(biāo)準(zhǔn)的應(yīng)用接口和支持多種基礎(chǔ)設(shè)施。
值得指出的是,軟件框架的大量使用對于軟件架構(gòu)復(fù)用也有不利的一面。這有兩個原因:其一是因為框架-般比較大,靈活性相對較差,利用框架搭建的架構(gòu)的可復(fù)用性難免因此受到局限;其二是因為框架一般由平臺提供,利用框架搭建的架構(gòu)通常具有平臺依賴性,即使在同-種平臺上,由于版本更替也可能造成某些框架被淘汰,與之相關(guān)的架構(gòu)即使保存下來也很難再有使用的機會。不僅如此,許多軟件框架,特別是一些軟件開 發(fā)平臺提供的框架,還掩蓋了軟件系統(tǒng)架構(gòu)的核心部分,它們的使用不僅限制了應(yīng)用層開發(fā)的創(chuàng)新空間,也給軟件系統(tǒng)的維護,特別是前面提到的適應(yīng)性維護和完善性維護,增加了難度。