直觀地說,軟件架構複用(yòng)就是在軟件的(de)架構層設計中套用(yòng)現有的(de)優勢架構。軟件架構複用(yòng)可(kě)基于特定的(de)軟件開發工具(平台),因爲它們具有一定的(de)積累功能;也(yě)可(kě)基于特定應用(yòng)領域,如電子政務、電子商務,因爲同一應用(yòng)領域的(de)軟件系統具有相似的(de)功能需求。
軟件架構複用(yòng)不僅可(kě)以提高(gāo)軟件開發的(de)效率,也(yě)有利于軟件系統開發的(de)标準化(huà)。此外,共享公共架構還(hái)有利于軟件系統之間的(de)互操作。軟件架構複用(yòng)的(de)成功案例使得(de)人(rén)們開始關注軟件架構與業務邏輯之間的(de)相對(duì)獨立性。通(tōng)常架構主要解決構件的(de)接口匹配問題和(hé)構件間的(de)通(tōng)信問題,而業務邏輯則主要決定構件的(de)操作内容。這(zhè)意味著(zhe)我們可(kě)以分(fēn)别完成架構與業務邏輯的(de)設計與開發,再把兩個(gè)結果合并起來(lái)。粗略地說,這(zhè)就是面向架構的(de)軟件開發。面向架構的(de)軟件開發可(kě)能有不同的(de)實現步驟。舉個(gè)例子,我們可(kě)以先采用(yòng)架構設計語(ArchitecturalDesignLanguage, ADL) 完成軟件架構設計,再對(duì)其進行編譯,編譯器的(de)輸出将包括構件骨架代碼(源碼)和(hé)連接器代碼等。在完成架構的(de)設計與編譯之後,就可(kě)以向構件骨架代碼中加入操作代碼,形成最終的(de)編程結果。
伴随著(zhe)軟件産業的(de)發展使可(kě)複用(yòng)、具有某種優勢的(de)架構及上述實現架構代碼的(de)逐漸被固定,使其商業化(huà),這(zhè)就是最原始的(de)軟件框架(frarnework)它實際上是-種軟件半成品,允許客戶添加可(kě)插拔的(de)定制構件來(lái)滿足細化(huà)的(de)需求。标準化(huà)是軟件框架的(de)另一個(gè)主要的(de)來(lái)源,如果套用(yòng)圖1給出的(de)模型,這(zhè)類框架與相關标準/協議(yì)之間的(de)關系就相當于軟件工具與方法論之間的(de)關系。軟件框架的(de)第三個(gè)來(lái)源是軟件工具。實際上,許多(duō)軟件工具,特别是集成開發平台,都爲開發者提供預定義的(de)框架,它們的(de)特點是帶有許多(duō)自動生成的(de)源代碼“骨架”,可(kě)以讓程序員(yuán)直接在其中添加客戶化(huà)内容。不僅如此,有的(de)集成開發環境,例如微軟的(de)VC++集成開發環境還(hái)能夠支持用(yòng)戶通(tōng)過某種面向架構的(de)編程來(lái)創建定制的(de)框架。這(zhè)些框架在開發環境中保留下(xià)來(lái),與預定義的(de)框架一樣可(kě)以複用(yòng)。
圖1:軟件工程的(de)工具模型
顯然,軟件框架複用(yòng)與軟件架構複用(yòng)的(de)區(qū)别在于前者的(de)複用(yòng)内容除了(le)架構之外,還(hái)有代碼。實際上,軟件架構的(de)複用(yòng)往往包含相關軟件框架的(de)複用(yòng)。如上所述,許多(duō)軟件框架就是爲了(le)固化(huà)某個(gè)架構而專門開發的(de)“大(dà)型積木(mù)塊”(與其想方設法去描述一個(gè)架構, 不如直接給出實現該架構的(de)關鍵代碼)。軟件框架的(de)複用(yòng)降低了(le)複用(yòng)優勢架構所需要的(de)代價,也(yě)提高(gāo)了(le)軟件開發效率與開發質量。根據框架在軟件整體架構中所處位置的(de)不同層次,常用(yòng)的(de)軟件框架分(fēn)爲支撐框架和(hé)應用(yòng)框架等。應用(yòng)框架固化(huà)的(de)是應用(yòng)層軟件模塊的(de)優勢結構,如JavaEE平 台上的(de)Struts框架。應用(yòng)框架中分(fēn)爲通(tōng)用(yòng)框架和(hé)領域框架,領域框架隻見于特定的(de)應用(yòng)領域,而通(tōng)用(yòng)框架則适用(yòng)于各種系統。在應用(yòng)系統與基礎設施兩隻之間支撐框架起到承上啓下(xià)的(de)作用(yòng), 支撐框架向應用(yòng)系統提供标準的(de)應用(yòng)接口和(hé)支持多(duō)種基礎設施。
值得(de)指出的(de)是,軟件框架的(de)大(dà)量使用(yòng)對(duì)于軟件架構複用(yòng)也(yě)有不利的(de)一面。這(zhè)有兩個(gè)原因:其一是因爲框架-般比較大(dà),靈活性相對(duì)較差,利用(yòng)框架搭建的(de)架構的(de)可(kě)複用(yòng)性難免因此受到局限;其二是因爲框架一般由平台提供,利用(yòng)框架搭建的(de)架構通(tōng)常具有平台依賴性,即使在同-種平台上,由于版本更替也(yě)可(kě)能造成某些框架被淘汰,與之相關的(de)架構即使保存下(xià)來(lái)也(yě)很難再有使用(yòng)的(de)機會。不僅如此,許多(duō)軟件框架,特别是一些軟件開 發平台提供的(de)框架,還(hái)掩蓋了(le)軟件系統架構的(de)核心部分(fēn),它們的(de)使用(yòng)不僅限制了(le)應用(yòng)層開發的(de)創新空間,也(yě)給軟件系統的(de)維護,特别是前面提到的(de)适應性維護和(hé)完善性維護,增加了(le)難度。