直觀地說,軟件架構(gòu)復(fù)用就是在軟件的架構(gòu)層設(shè)計(jì)中套用現(xiàn)有的優(yōu)勢(shì)架構(gòu)。軟件架構(gòu)復(fù)用可基于特定的軟件開發(fā)工具(平臺(tái)),因?yàn)樗鼈兙哂幸欢ǖ姆e累功能;也可基于特定應(yīng)用領(lǐng)域,如電子政務(wù)、電子商務(wù),因?yàn)橥粦?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ù)邏輯之間的相對(duì)獨(dú)立性。通常架構(gòu)主要解決構(gòu)件的接口匹配問題和構(gòu)件間的通信問題,而業(yè)務(wù)邏輯則主要決定構(gòu)件的操作內(nèi)容。這意味著我們可以分別完成架構(gòu)與業(yè)務(wù)邏輯的設(shè)計(jì)與開發(fā),再把兩個(gè)結(jié)果合并起來。粗略地說,這就是面向架構(gòu)的軟件開發(fā)。面向架構(gòu)的軟件開發(fā)可能有不同的實(shí)現(xiàn)步驟。舉個(gè)例子,我們可以先采用架構(gòu)設(shè)計(jì)語(ArchitecturalDesignLanguage, ADL) 完成軟件架構(gòu)設(shè)計(jì),再對(duì)其進(jìn)行編譯,編譯器的輸出將包括構(gòu)件骨架代碼(源碼)和連接器代碼等。在完成架構(gòu)的設(shè)計(jì)與編譯之后,就可以向構(gòu)件骨架代碼中加入操作代碼,形成最終的編程結(jié)果。
伴隨著軟件產(chǎn)業(yè)的發(fā)展使可復(fù)用、具有某種優(yōu)勢(shì)的架構(gòu)及上述實(shí)現(xiàn)架構(gòu)代碼的逐漸被固定,使其商業(yè)化,這就是最原始的軟件框架(frarnework)它實(shí)際上是-種軟件半成品,允許客戶添加可插拔的定制構(gòu)件來滿足細(xì)化的需求。標(biāo)準(zhǔn)化是軟件框架的另一個(gè)主要的來源,如果套用圖1給出的模型,這類框架與相關(guān)標(biāo)準(zhǔn)/協(xié)議之間的關(guān)系就相當(dāng)于軟件工具與方法論之間的關(guān)系。軟件框架的第三個(gè)來源是軟件工具。實(shí)際上,許多軟件工具,特別是集成開發(fā)平臺(tái),都為開發(fā)者提供預(yù)定義的框架,它們的特點(diǎn)是帶有許多自動(dòng)生成的源代碼“骨架”,可以讓程序員直接在其中添加客戶化內(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)之外,還有代碼。實(shí)際上,軟件架構(gòu)的復(fù)用往往包含相關(guān)軟件框架的復(fù)用。如上所述,許多軟件框架就是為了固化某個(gè)架構(gòu)而專門開發(fā)的“大型積木塊”(與其想方設(shè)法去描述一個(gè)架構(gòu), 不如直接給出實(shí)現(xiàn)該架構(gòu)的關(guān)鍵代碼)。軟件框架的復(fù)用降低了復(fù)用優(yōu)勢(shì)架構(gòu)所需要的代價(jià),也提高了軟件開發(fā)效率與開發(fā)質(zhì)量。根據(jù)框架在軟件整體架構(gòu)中所處位置的不同層次,常用的軟件框架分為支撐框架和應(yīng)用框架等。應(yīng)用框架固化的是應(yīng)用層軟件模塊的優(yōu)勢(shì)結(jié)構(gòu),如JavaEE平 臺(tái)上的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è)施。
值得指出的是,軟件框架的大量使用對(duì)于軟件架構(gòu)復(fù)用也有不利的一面。這有兩個(gè)原因:其一是因?yàn)榭蚣?般比較大,靈活性相對(duì)較差,利用框架搭建的架構(gòu)的可復(fù)用性難免因此受到局限;其二是因?yàn)榭蚣芤话阌善脚_(tái)提供,利用框架搭建的架構(gòu)通常具有平臺(tái)依賴性,即使在同-種平臺(tái)上,由于版本更替也可能造成某些框架被淘汰,與之相關(guān)的架構(gòu)即使保存下來也很難再有使用的機(jī)會(huì)。不僅如此,許多軟件框架,特別是一些軟件開 發(fā)平臺(tái)提供的框架,還掩蓋了軟件系統(tǒng)架構(gòu)的核心部分,它們的使用不僅限制了應(yīng)用層開發(fā)的創(chuàng)新空間,也給軟件系統(tǒng)的維護(hù),特別是前面提到的適應(yīng)性維護(hù)和完善性維護(hù),增加了難度。