數據流系統
概念:以算法和數據結構為中心, 像管道和過濾器般處理數據,每個組件都有相對獨立的數據處理功能,數據依次經過各個組件,最后形成完整的數據處理系統。優點:各個組件都是獨立的, 可以放方便的組合、重用和擴展,流水線式的執行,支持大規模并行處理。缺點:流水線式的處理, 所以一般要求數據有比較統一的輸入和輸出格式;各個組件都是獨立的, 因此的很難提取共性;批處理方式,所以不適合和用戶交互。應用:一個最著名的實例是unix的shell編程,多個對數據進行處理的程序(組件)通過管道聯結起來,產生總和的效果。 還有傳統的編譯器,源代碼經過詞法分析、語法分析、中間代碼生成、目標代碼生成等步驟生成輸出的目標代碼。 還有其他經過多步才能生成結果的程序,比如圖像處理,數值解題等。
層次系統
概念:將系統功能和組件分成不同的功能層次,一般而言,只有最上層的組件和功能可以被系統外的使用者訪問,只有相鄰的層次之間才能夠有函數調用。優點:把復雜的問題逐層分解,使整體設計非常清晰;每層只依賴相連的里層,耦合性較弱。缺點:有些劃分清晰的層次比較困難;層次太多會使性能下降。應用:層次系統是我們最常見的方式, 一般軟件都有它的影子,比如程序典型的三層架構分為表示層(界面層)、業務邏輯層、數據訪問層。 操作系統一般分為內核層,API層, 應用層, 我在理解 Windows API 調用過程中有相關介紹。 各層之間的交互方式也值得我們探討下, 一般調用方式有直接接口調用和消息發送二種方式,究竟什么時候該用哪種方式,可以參考我這篇消息耦合還是接口耦合. 總的來說如果很強調弱耦合和可擴展性,可以用消息方式,我們看到Windows上在調用API進入內核時用的是中斷消息的方式。
面向對象的系統
概念:數據和數據上的操作被封裝成抽象數據類型或者對象。系統由大量的對象組成,在物理上,對象之間通過函數或者過程調用相互作用;在邏輯上,對象之間通過集成、復合等方式實現設計的復用。
優點:符合人們認識事物的方式,支持封裝,繼承,多態。
缺點:通過函數調用,并且需要知道處理的對象,耦合性比較緊密,我這篇范型編程雜談中也有談及。
應用:面向對象設計和開發基本上已經是每個程序員的必修課,各種流行的編程語言都有對它的支持,COM組件技術也是以此為基礎。
基于事件的系統
概念:這是面向對象和數據抽象體系的一種變形,系統同樣是由大量的對象組成的,但是對象之間的交互不是通過明確指明對象的函數或者過程調用進行的,相反,系統提供事件的創建和發布的機制,對象產生事件,一個或者多個對象通過向系統注冊關注這個事件并由此觸發出相應的行為或者產生新的事件。
優點:用于函數和過程的調用調用不需要指明特定的對象,所以系統具有非常好的靈活性和擴展性,新的組件只需要向系統的事件處理部分注冊就可以立刻加入系統中,同樣,老的組件也可以方便的從系統中刪除。
缺點:由于函數調用是通過事件發送進行的,所以,發出事件的對象不能確認是否有對象處理了這個事件、是否是期望的對象處理了這個事件、是否獲得期望的結果,同樣也無法控制事件發生的次序,系統的邏輯和時序的正確性必須通過復雜的時序邏輯和前后條件的斷言加以保證。
應用:Windows的鼠標鍵盤消息,窗口消息等都是基這種方式, 消息總線(Message Bus)也是基于這種架構。該方式與面向對象方式的比較我在消息耦合還是接口耦合這篇中也有提及。
知識庫系統
概念:使用一個中心數據結構表示系統的當前狀態,一組相互獨立的組件在中心數據庫上進行操作。如果組件負責對中心數據進行選擇、處理,這種體系就是傳統的數據庫模型;如果中心數據結構自主的引發一系列的行為,則這種體系可以看成一個黑板模型。
優點:以數據為中心的體系結構,可以自然的表示大量的數據和事務處理的邏輯,適合表達以數據為中心的應用程序。
缺點:只有很少一部分簡單的數據庫存儲應用可以完全采用這種體系結構表示。
應用:傳統的數據庫。
解釋器系統
概念:如果應用程序的邏輯非常復雜,一個較好的體系就是提供面向領域的一組指令(語言),系統解釋這種語言,產生相應的行為,用戶使用這種指令(語言)完成復雜的操作。
優點:非常好的擴展性,用戶可以實現對軟件系統的二次開發。
缺點:軟件開發復雜,特別是這種指令集的設計非常困難。
應用:Java虛擬機, .Net的CLR(Common Language Runtime), 腳本語言的解釋器等。
在實際開發中,我們很少會只使用一種體系結構,很多時候是以一種體系結構為主, 其他體系結構為輔。比如我們一個網絡客戶端軟件總體上是層次系統,可能分為通訊層、業務邏輯層、界面層, 但每層內部又會用面向對象的方式實現。
總之, 軟件系統的分析和設計的基本任務是:確立系統中的基本元素(完成系統的功能所必不可少的成分);確定這些元素之間相互作用的方式(這就是系統的體系結構)。
參考資料:百度百科 體系結構
posted on 2013-01-27 21:15
Richard Wei 閱讀(3218)
評論(1) 編輯 收藏 引用 所屬分類:
架構體系