一、概述
軟件體系結構表示系統的框架結構,用於從較高的層次上來描述各部分之間的關係和接口,主要包括構件、構件性質和構件之間的關係。
通過使用軟件體系結構,可以有效地分析用戶需求,方便系統的修改,以及減小程序構造風險。
隨着軟件規模不斷地增大和複雜程度日益增高,系統框架架構的設計變得越來越關鍵。軟件框架設計的核心問題是能否複用已經成型的體系結構方案。由此,產生了軟件體系結構風格的概念。
二、常見風格分類
體系結構風格的形成是多年探索研究和工程實踐的結果。一個良好和通用的體系結構風格往往是工程技術領域成熟的標誌。經過多年的發展,已經總結出許多成熟的軟件體系結構風格,例如:
- 數據流風格:批處理和管道/過濾器。
- 調用/返回風格:主程序/子程序、層次結構和C/S。
- 面向對象風格。
- 獨立部件風格:進程通信和事件驅動。
- 虛擬機風格:解釋器和基於規則的系統。
- 數據共享風格:數據庫系統和黑板系統。
三、 體系結構風格
1.管道/過濾器 體系結構風格
慣用模式:
主要包括過濾器和管道兩種元素。在這種結構中,構件被稱爲過濾器,負責對數據進行加工處理。每個過濾器都有一組輸入端口和輸出端口,從輸入端口接收數據,經過內部加工處理之後,傳送到輸出端口上。數據通過相鄰過濾器之間的連接件進行傳輸,連接件可以看作輸入數據流和輸出數據流之間的通路,這就是管道。
原理圖:
優點:
- 簡單性。
- 支持複用。
- 系統具有可擴展性和可進化型。
- 系統併發性(每個過濾器可以獨立運行,不同子任務可以並行執行,提高效率)。
- 便於系統分析。
缺點:
- 系統處理工程是批處理方式。
- 不適合用來設計交互式應用系統。
- 由於沒有通用的數據傳輸標準,因此每個過濾器都需要解析輸入數據和合成數據。
- 難以進行錯誤處理。
傳統的編譯器就是管道/過濾器體系結構風格的一個實例。編譯器由詞法分析、語法分析、語義分析、中間代碼生成、中間代碼優化和目標代碼生成幾個模塊組成,一個模塊的輸出是另一個模塊的輸入。源程序經過各個模塊的獨立處理之後,最終將產生目標程序。編譯器的框架結構如圖:
2.面向對象 體系結構風格
慣用模式:
在面向對象體系結構中,軟件工程的模塊化、信息隱藏、抽象和重用原則得到了充分的體現。在這種體系結構中,數據表示和相關原語操作都被封裝在抽象數據類型中。在這種風格中,對象是構件,也成爲抽象數據類型的實例。對象與對象之間,通過函數調用和過程調用來進行交互。
原理圖:
優點:
- 一個對象對外隱藏了自己的詳細信息
- 對象將數據和操作封裝在一起
- 繼承和封裝方法爲對象服用提供了技術支持
缺點:
- 如果一個對象要調用另一個對象,則必須知道它的標識和名稱
- 會產生連鎖反應
3.事件驅動 體系結構風格
慣用模式:
事件驅動就是在當前系統的基礎之上,根據事件聲明和發展狀況來驅動整個應用程序運行。
事件驅動體系結構的基本思想是:系統對外部的行爲表現可以通過它對事件的處理來實現。在這種體系結構中,構件不再直接調用過程,而是聲明事件。系統其他構件的過程可以在這些事件中進行註冊。當觸發一個事件的時候,系統會自動調用這個事件中註冊的所有過程。因此,觸發一個事件會引起其他構件的過程調用。
原理圖:
優點:
- 事件聲明者不需要知道哪些構件會響應事
- 提高了軟件複用能力
- 便於系統升級
缺點:
- 構件放棄了對計算的控制權,完全由系統來決定
- 存在數據·傳輸問題
4.分層 體系結構風格
慣用模式:
在分層風格中,系統將劃分爲一個層次結構。
每一層都具有高度的內聚性,包含抽象程度一致的各種構件,支持信息隱藏。
分層有助於將複雜系統劃分爲獨立的模塊,從而簡化程序的設計和實現。
通過分解,可以將系統功能劃分爲一些具有明確定義的層,較高層是面對特定問題,較低層具有一般性。
每層都爲上層提供服務,同時又利用了下層的邏輯功能。在分層體系結構中,每一層只對相鄰層可見。層次之間的連接件是協議和過程調用。用以實現各層之間的交互。
原理圖:
優點:
- 設計者可以將系統分解爲一個增量的步驟序列從而完成複雜的業務邏輯。
- 每一層之多和相鄰的上下兩層進行交互。
- 只要給相鄰層提供相同的接口。
缺點:
- 並非所有系統都能夠按照層次來進行劃分。
- 很難找到一種合適和正確的層次劃分方法。
- 在傳輸數據是,需要經過多個層次。
- 多層結構難以調試。
5.C2 體系結構風格
慣用模式:
C2結構是一個層次網絡,包括構件和連接件兩種軟件元素。構件和連接鍵都是包含頂部和底部的軟件元素。構件和構件之間只能通過連接件進行連接,而連接件之間則可以直接進行連接。構件的頂部、底部分別與連接件的底部、頂部連接,連接件的頂部、底部也分別與連接件的底部、頂部連接。
在C2體系結構中,構件之間的所有通信必須使用消息傳遞機制來實現。構件之間所有傳遞的信息可以分爲兩種,一種是向上層構件發出服務請求的請求消息,另一種是向下層構件發出指示狀態變化的通知消息。連接件負責消息的過濾、路由、廣播、通信和相關處理。
原理圖:
優點:
- 可以使用任何編程語言來開發構件,構件重用和替換比較容易實現
- 具有一定的擴展能力,可以有多種不同粒度的構件
- 構件不需要共享地址空間,避免了共享全局變量所造成的複雜關係
- 具有良好的適應性
- 在C2體系結構中,可以使用多個工具集和多種媒體類型,能夠動態地更新系統的框架結構
缺點:
- 構件和構件之間不允許直接相連
- 與某一個連接件相關聯的構件和連接件的數目沒有限制
6.數據共享 體系結構風格
定義:
數據共享風格也成爲倉庫風格。
在這種風格中,有兩種不同類型的軟件元素:一種是中央數據單元,也成爲資源庫,用於表示系統的當前狀態;另一種是相互依賴的構件組,這些構件可以對中央數據單元實施操作。中央數據單元和構件之間可以進行信息交換,這是數據共享體系結構的技術實現基礎。
根據所使用的控制策略不同,數據共享體系結構可以分爲兩種類型,一種是傳統的數據庫,另一種是黑板。
如果由輸入流中的事件來驅動系統進行信息處理,把執行結構存儲到中央數據單元,則這個系統就是數據庫應用系統。
如果由中央數據單元的當前狀態來驅動系統運行,則這個系統就是黑板應用系統。
黑板是數據共享體系結構的一個特例,用以解決狀態衝突並處理可能存在的不確定性知識源。
黑板常用於信號處理,如語音和模式識別,同時在自然語言處理領域中也有廣泛的應用,如機器翻譯和句法分析。
原理圖:
一個典型的黑板系統主要包括知識源、中央控制單元、控制單元。
優點:
- 便於多客戶共享大量數據,而不必關心數據是何時產生的、由誰提供的及通過何種途徑來提供
- 便於將構件作爲知識源添加到系統中來
缺點:
- 對共享數據結構,不同知識源要達成一致
- 需要同步機制和加鎖機制來保證數據的完整性和一致性,增大了系統設計的複雜度
7.解釋器 體系結構風格
慣用模式:
解釋器作爲一種體系結構,主要用於構建虛擬機,用以彌合程序語義和計算機硬件之間的間隙。實際上,解釋器是利用軟件來創建的一種虛擬機,因此,解釋器風格又被稱爲虛擬機風格。
原理圖:
優點:
- 能夠提高應用程序的抑制能力和變成語言的跨平臺移植能力。
- 實際測試工作可能費城複雜,測試代價極其昂貴,具有一定的風險性。
缺點:
- 由於使用了特定了語言和自定義操作規則,因此增加了系統運行的開銷。
- 解釋器系統難以設計和測試。
8.反饋控制環 體系結構風格
定義:
反饋控制環是一種特定的數據流結構。傳統數據流結構是線性的,而控制連續循環過程的體系結構應該是環形的。
反饋控制環系統主要包括以下三個部分:
- 過程,指操縱過程變量的相關機制。
- 數據元素,指連續更新的過程變量,包括輸入變量、控制變量、操縱變量和相關參考值。
- 控制器,通過控制規則來修正變量,收集過程的實際狀態和目標狀態,調節變量以驅動實際狀態朝目標狀態前進。
原理圖:
優點:
- 過程控制是連續的,可以利用各種構件和相關規則來設計反饋控制環系統,實現各種功能。
- 反饋控制環結構能夠處理複雜的自適應問題,機器學習就是一個例子。
缺點:
?
9.C/S 體系結構風格
慣用模式:
……
原理圖:
優點:
- 客戶機構件和服務器構件分別運行在不同的計算機上,有利於分佈式數據的組織和處理。
- 構件之間的位置是相互透明的,客戶機程序和服務器程序都不必考慮對方的實際存儲位置。
- 客戶機側重數據的顯示和分析,服務器則注重數據的管理。
- 構件之間是彼此獨立和充分隔離的。
- 將大規模的業務邏輯分佈到多個通過網絡連接的低成本的計算機,降低了系統的整體開銷。
缺點:
- 開發成本較高。
- 在開發C/S結構系統時,大部分工作都都集中在客戶機程序的設計上,增加了設計的複雜度。
- 信息內容和形式單一。
- 如果對C/S體系結構的系統進行升級,開發人員需要到現場來更新客戶機程序,同時需要對運行環境進行重新配置,增加了維護費用。
- 兩層C/S結構採用了單一的服務器,同時以局域網爲中心,因此難以擴展到Intranet和Internet。
- 數據安全性不高。
10.B/S 體系結構風格
慣用模式:
B/S結構是三層C/S體系結構的一種實現方式,主要包括瀏覽器,Web服務器和數據庫服務器。B/S結構主要利用不斷成熟的WWW技術,結合瀏覽器的多腳本語言,採用通用瀏覽器來實現原來需要複雜的專用軟件才能實現的強大功能,節約了開發成本。
B/S體系結構的核心是Web服務器,可以將應用程序以網頁的形式存放在Web服務器上。
當用戶運行某個應用程序時,只需要在可以斷的瀏覽器中輸入響應的 URL,向 Web 服務器提出 HTTP 請求。
當Web 服務器接收 HTTP 請求之後,會調用相關的應用程序(Servlets),同時向數據庫服務器發送數據操作請求。
數據庫服務器對數據操作請求進行響應,將結果返回給Web服務器的應用程序。
Web服務器應用程序執行業務處理邏輯,利用 HTML 來封裝操作結果,通過瀏覽器呈現給用戶。在B/S結構中,數據請求、王爺生成、數據庫訪問和應用程序執行全部由Web 服務器來完成。
原理圖:
優點:
- 客戶端只需要安裝瀏覽器,操作簡單。
- 運用HTTP標準協議和統一客戶端軟件,能夠實現跨平臺通信。
- 開發成本比較低,只需要維護Web服務器程序和中心數據庫。
缺點:
- 個性化程度比較低,所有客戶端程序的功能都是一樣的。
- 客戶端數據處理能力比較差。
- 在B/S結構的系統中,數據提交一般以頁面爲單位,動態交互性不強,不利於在線事務處理。
- B/S體系結構的可擴展性比較差,系統安全性難以保障。
- B/S結構的應用系統查詢中心數據庫,其速度要遠低於C/S體系結構。
11.公共對象請求代理(CORBA)體系結構風格
慣用模式:
公共對象請求代理(Common Object Request Broker Architecture,CORBA)是由對象管理組織(Object Management Group,OMG)提出來的,是一套完整的對象技術規範,其核心包括標準語言、接口和協議。
在異構分佈式環境下,可以利用CORBA來實現應用程序之間的交互操作,同時,CORBA也提供了獨立於開發平臺的編程語言的對象重用方法。
原理圖:
優點:
- 實現了客戶端程序與服務器程序的分析。
- 將分佈式計算模式與面向對象技術結合起來,提高了軟件複用率。
- 提供了軟件總線機制,軟件總線是指一組定義的完整的接口規範。
- CORBA能夠支持不同的編程語言和操作系統,在更大的範圍內,開發人員能夠相互利用已有的開發成果。
缺點:
?
12.正交 體系結構風格
慣用模式:
正交體系結構是一種以 垂直線索構件族 爲基礎的層次化結構,包括組織層和線索。
在每一個組織層中,都包含具有相同抽象級別的構件。
線索是子系統的實例,是由完成不同層次功能的構件通過相互調用而形成的,每一條線索完成系統的一部分相對獨立的功能。
在正交體系結構中,每條線索的實現與其他線索的實現無關或關聯很少。在同一層次中,構件之間不存在相互調用關係。
原理圖:
優點:
- 結構清晰。
- 便於修改和維護。
- 易於重用。
缺點:
?
13.MVC 體系結構風格
慣用模式:
模型-視圖-控制器(Model-View-Controller,MVC)是一種常見的體系結構風格。MVC被廣泛應用與用戶交互程序的設計中。
原理圖:
優點:
- 多個視圖與一個模型相對應
- 具有良好的移植性。
- 系統被分割爲三個獨立的部分,當功能發生變化時,改變其中的一個部分就能夠滿足要求。
缺點:
- 增加了系統設計和運行複雜性。
- 視圖與控制器連接過於緊密,妨礙兩者的獨立複用。
- 視圖訪問模型的效率比較低。