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

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