
分層架構
分層架構將整個系統視為一個層次結構,其中軟體系統被分解成層次結構中不同級別的邏輯模組或子系統。這種方法通常用於設計系統軟體,例如網路協議和作業系統。
在系統軟體層次結構設計中,低階子系統為其相鄰的上級子系統提供服務,上級子系統呼叫下級子系統中的方法。較低層提供更具體的函式,例如I/O服務、事務處理、排程、安全服務等。中間層提供更多與領域相關的功能,例如業務邏輯和核心處理服務。而上層則以使用者介面的形式提供更抽象的功能,例如GUI、shell程式設計工具等。
它也用於組織類庫,例如名稱空間層次結構中的.NET類庫。所有設計型別都可以實現這種分層架構,並且經常與其他架構風格結合。
分層架構風格分為:
- 主程式-子程式
- 主從式
- 虛擬機器
主程式-子程式
這種風格的目的是重用模組並自由開發各個模組或子程式。在這種風格中,軟體系統透過自頂向下的細化根據系統的預期功能被劃分為子程式。
這些細化垂直進行,直到分解的模組足夠簡單,以至於具有其獨特的獨立責任。功能可以被上層中的多個呼叫者重用和共享。
資料作為引數傳遞給子程式有兩種方式:
按值傳遞 - 子程式只使用傳遞的資料,但不能修改它。
按引用傳遞 - 子程式使用並更改引數引用的資料的值。

優點
易於基於層次細化分解系統。
可用於面向物件設計中的子系統。
缺點
由於包含全域性共享資料而容易受到攻擊。
緊密耦合可能會導致更多變化的連鎖反應。
主從式
這種方法應用了“分而治之”的原則,並支援容錯計算和計算精度。它是主程式-子程式架構的改進,提供了系統的可靠性和容錯性。
在這種架構中,從機向主機提供重複的服務,主機透過某種選擇策略從從機中選擇特定結果。從機可以透過不同的演算法和方法或完全不同的功能來執行相同的函式任務。它包括平行計算,其中所有從機都可以並行執行。

主從模式的實現遵循五個步驟:
指定如何將任務的計算劃分為一組相等的子任務,並確定處理子任務所需的子服務。
指定如何藉助於處理各個子任務獲得的結果來計算整個服務的最終結果。
為步驟1中標識的子服務定義一個介面。它將由從機實現,並由主機用來委託處理各個子任務。
根據上一步中制定的規範實現從機元件。
根據步驟1到3中制定的規範實現主機。
應用
適用於軟體可靠性至關重要的應用。
廣泛應用於並行和分散式計算領域。
優點
計算速度更快,易於擴充套件。
提供健壯性,因為從機可以複製。
可以以不同的方式實現從機以最大限度地減少語義錯誤。
缺點
通訊開銷。
並非所有問題都可以劃分。
難以實現且存在可移植性問題。
虛擬機器架構
虛擬機器架構模擬某些功能,這些功能並非其所執行的硬體和/或軟體的原生功能。虛擬機器構建在現有系統之上,並提供虛擬抽象、一組屬性和操作。
在虛擬機器架構中,主機使用從機提供的“相同”子服務,並執行諸如分割工作、呼叫從機和組合結果之類的功能。它允許開發人員模擬和測試尚未構建的平臺,以及模擬對真實系統進行測試過於複雜、成本過高或危險的“災難”模式。
在大多數情況下,虛擬機器將程式語言或應用程式環境與執行平臺分開。主要目標是提供可移植性。透過虛擬機器解釋特定模組可以理解為:
解釋引擎從正在解釋的模組中選擇一條指令。
根據指令,引擎更新虛擬機器的內部狀態,並重覆上述過程。
下圖顯示了單個物理機上標準VM基礎架構的架構。

管理程式,也稱為虛擬機器監視器,執行在主機作業系統上,併為每個客戶作業系統分配匹配的資源。當客戶機進行系統呼叫時,管理程式會攔截並將其轉換為主機作業系統支援的相應系統呼叫。管理程式控制每個虛擬機器對CPU、記憶體、永續性儲存、I/O裝置和網路的訪問。
應用
虛擬機器架構適用於以下領域:
如果不存在直接解決方案,則適用於透過模擬或轉換來解決問題。
示例應用程式包括微程式設計直譯器、XML處理、指令碼命令語言執行、基於規則的系統執行、Smalltalk和Java直譯器型別的程式語言。
虛擬機器的常見示例包括直譯器、基於規則的系統、語法外殼和命令語言處理器。
優點
可移植性和機器平臺無關性。
軟體開發的簡單性。
透過中斷和查詢程式的能力提供靈活性。
災難工作模型的模擬。
在執行時引入修改。
缺點
由於直譯器的性質,直譯器的執行速度慢。
由於執行中涉及額外的計算,因此存在效能成本。
分層風格
在這種方法中,系統被分解成層次結構中許多更高和更低的層,並且每一層在系統中都有其獨特的責任。
每一層由一組相關的類組成,這些類封裝在包中、部署的元件中,或者作為方法庫或標頭檔案格式的子程式組。
每一層都為其上層的層提供服務,並作為其下層的客戶端,即對第i+1層的請求透過第i層的介面呼叫第i層提供的服務。如果任務完成,響應可能會返回到第i+1層;否則,第i層將持續呼叫來自其下方的第i-1層提供的服務。
應用
分層風格適用於以下領域:
涉及可以按層次組織的不同類別的服務的應用程式。
任何可以分解成特定於應用程式和特定於平臺的部分的應用程式。
具有核心服務、關鍵服務和使用者介面服務等之間明確劃分的應用程式。
優點
基於增量抽象級別的設計。
提供增強獨立性,因為對一層功能的更改最多會影響另外兩層。
標準介面及其實現的分離。
透過使用基於元件的技術實現,這使得系統更容易允許即插即用新元件。
每一層都可以是一個獨立部署的抽象機,支援可移植性。
易於基於自頂向下細化方式的任務定義來分解系統
同一層的不同實現(具有相同的介面)可以互換使用
缺點
許多應用程式或系統不容易以分層方式構建。
較低的執行時效能,因為客戶端的請求或對客戶端的響應必須經過可能存在的多個層。
每一層的資料編組和緩衝也存在效能開銷問題。
開啟層間通訊可能會導致死鎖,“橋接”可能會導致緊密耦合。
異常和錯誤處理在分層架構中是一個問題,因為一層中的故障必須向上傳播到所有呼叫層