軟件架構
軟件架構是一系列相關的抽象模式,用於指導大型軟件系統各個方面的設計。
介紹
軟件體系結構是構建計算機軟件實踐的基礎。與建築師設定建築項目的設計原則和目標,作為繪圖員畫圖的基礎一樣,一個軟件架構師或者系統架構師陳述軟件構架以作為滿足不同客戶需求的實際系統設計方案的基礎。從和目的、主題、材料和結構的聯繫上來說,軟件架構可以和建築物的架構相比擬。一個軟件架構師需要有廣泛的軟件理論知識和相應的經驗來事實和管理軟件產品的高級設計。軟件架構師定義和設計軟件的模塊化,模塊之間的交互,用戶界面風格,對外接口方法,創新的設計特性,以及高層事物的對象操作、邏輯和流程。
軟件架構師與客戶商談概念上的事情,與經理商談廣泛的設計問題,與軟件工程師商談創新的結構特性,與程序員商談實現技巧,外觀和風格。
軟件架構是一個系統的草圖。軟件架構描述的對象是直接構成系統的抽象組件。各個組件之間的連接則明確和相對細緻地描述組件之間的通訊。在實現階段,這些抽象組件被細化為實際的組件,比如具體某個類或者對象。在面向對象領域中,組件之間的連接通常用接口_(計算機科學)來實現。
歷史
早在1960年代,諸如E·W·戴克斯特拉就已經涉及軟件架構這個概念了。自1990年代以來,部分由於在 Rational Software Corporation 和Microsoft內部的相關活動,軟件架構這個概念開始越來越流行起來。
卡內基梅隆大學和加州大學埃爾文分校在這個領域作了很多研究。卡內基·梅隆大學的Mary Shaw和David Garlan於1996年寫了一本叫做 Software Architecture perspective on an emerging discipline的書,提出了軟件架構中的很多概念,例如軟件組件、連接器、風格等等。 加州大學埃爾文分校的軟件研究院所做的工作則主要集中於架構風格、架構描述語言以及動態架構。
架構描述語言
架構描述語言(ADL)用於描述軟件的體系架構。現在已有多種架構描述語言,如Wright (由卡內基梅隆大學開發),Acme (由卡內基梅隆大學開發),C2 (由UCI開發), Darwin (由倫敦帝國學院開發)。ADL的基本構成包括組件、連接器和配置。
視圖
軟件架構一般來說組織成視圖,如同在建築學中的不同種類的藍圖。一些可能的視圖有:
- 功能/邏輯視圖
- 代碼視圖
- 開發/結構視圖
- 並行/過程/線程視圖
- 物理/部署視圖
- 用戶動作/反饋視圖
有許多為描述軟件架構的語言被開發出來,但是關於應該採用什麼樣的符號集和視圖系統還沒有達成共識。一些人相信UML將建立一套軟件架構視圖的標準。
例子
設計軟件模塊以及模塊之間的通信有很多常用手段,包括
- 客戶端服務器
- 分布式計算
- 對等系統
- 黑板
- 隱式調用
- 插件
- 單層系統
- 三層結構
- 結構化(基於模塊,但在模塊內部是一體的)
- 基於軟件構件 (基於模塊,在模塊內部,通常採用面向對象程序設計方法,slightly less monolithic)
- 面向服務的體系架構
相關的概念
在軟件架構中,使用了很多概念,包括:
參見
參考文獻
- Len Bass, Paul Clements, Rick Kazman: Software Architecture in Practice. Addison Wesley, Reading 1998 ISBN 0-201-19930-0 (gives a good overview of architectural concepts)
- Philippe Kruchten: Architectural Blueprints - the 4+1 View Model of Software Architecture. In: IEEE Software. 12 (6) November 1995, pp. 42-50 (also available online at the Rational website(PDF))
- James O. Coplien: Multi-Paradigm Design in C++. Addison Wesley, Reading 1998 ISBN 0-201-82467-1 (outlines all reasonable design approaches possible in C++, which is a particularly rich language but difficult for beginners)