10 個常用的軟體架構模式
你是否曾經思考過如何設計大型的企業級系統?在決定啟動軟體開發之前,首要的是選擇恰當的架構來指引系統的功能及質量屬性設計。因此在將軟體架構應用於設計之前,必需要了解常用的架構模式。
什麼是架構模式?
Wikipedia 的解釋:
在軟體架構中,架構模式是對特定環境下常見問題的通用且可重用的解決方案。架構模式與軟體設計模式很相似,但架構模式的層次更高,且外延更大。
這篇文章將簡述常見的 10 種架構模式的概念、用法以及其優缺點。
-
分層模式(Layered pattern)
-
客戶端/伺服器模式(Client-server pattern)
-
主/從模式(Master-slave pattern)
-
管道/過濾器模式(Pipe-filter pattern)
-
代理模式(Broker pattern)
-
對等模式(Peer-to-peer pattern)
-
事件匯流排模式(Event-bus pattern)
-
模型/檢視/控制器(MVC)模式(Model-view-controller pattern)
-
黑板模式(Blackboard pattern)
-
解析器模式(Interpreter pattern)
1. 分層模式(Layered pattern)
分層模式用於對結構化設計的軟體進行層次拆解,每個層次為獨立的抽象,為其上層抽象提供服務。
系統通常被拆分為以下四個層次:
-
表示層(也稱為 UI 層)
-
應用層(也稱為服務層)
-
業務邏輯層(也稱為領域層)
-
資料訪問層(也稱為持久化層)
使用場景
-
通用桌面應用程式
-
電子商務 Web 應用
2. 客戶端/伺服器模式(Client-server pattern)
客戶端/伺服器模式由兩個部分構成:一個伺服器與多個客戶端。伺服器元件同時為多個客戶端元件提供服務。客戶端向伺服器發啟服務請求,伺服器將相應服務資訊迴應給客戶端。此外,伺服器持續監聽來自客戶端的請求。
使用場景
-
電子郵件、檔案共享及銀行業務等線上應用
3. 主/從模式(Master-slave pattern)
主/從模式由兩個部分構成:主裝置與從裝置。主服務元件將作業分發給多個從裝置元件,並根據這些從裝置反饋的結果,計算生成最終結果。
使用場景
-
資料庫複製,主資料庫被認定為權威資料來源,各從資料庫與主資料保持同步
-
在計算機系統中通過匯流排互連的各裝置(包括主裝置與從裝置)
4. 管道/過濾器模式(Pipe-filter pattern)
管道/過濾器模式用於構造用於生成及處理資料流的系統。每個處理過程都封裝在過濾器(filter)元件之中,要處理的資料通過 管道(pips) 進行投遞。管道同時用於作為 過濾器(filter) 間的緩衝及同步。
使用場景
-
編譯器,一系列的過濾器用於詞法分析、語法分析、語義分析及程式碼生成
-
生物資訊學的工作流
5. 代理模式(Broker pattern)
代理模式用於在結構化系統中對元件解耦。系統內各元件間採用遠過程呼叫(remote service invocations)的方式互動。代理(Broker)元件充當元件間通訊的協調角色。
提供服務的元件將其能力(服務以及特性)釋出給代理,客戶端均向代理請求服務,由代理將請求重定向到先前已釋出過對應服務的元件進行處理。
使用場景
-
訊息中介軟體軟體:Apache ActiveMQ,Apache Kafka,RabbitMQ 與 JBoss 等等
6. 對等模式(Peer-to-peer pattern)
對等模式中的元件稱之為對等體(peer),對等體既作為向其他對等體請求服務的客戶端,同時也做為響應其他對等體請求的服務端。對等體可以在執行過程中動態地改變其角色,即,既可以單獨做為客戶端或服務端執行,又可同時作為客戶端與服務端執行。
使用場景
-
網路檔案共享:Gnutella 與 G2)
-
流媒體協議:P2PTV 與 PDTP.
-
流媒體應用: Spotify.
7. 事件匯流排模式(Event-bus pattern)
事件匯流排模式應用於事件處理,主要由四個元件構成:事件源(event source),事件偵聽者(event listener),通道(Channel)以及匯流排(event bus)。 事件源將訊息釋出到匯流排的特定通道,偵聽者訂閱相應的通道,事件源所釋出的訊息經通道通告給訂閱通道的偵聽者。
使用場景
-
Android 開發
-
通告(Notification)服務
8. 模型/檢視/控制器(MVC)模式(Model-view-controller pattern)
模型/檢視/控制器模式(簡稱 MVC 模式)將互動式應用程式拆分為三個部分:
-
模型(model) – 包含核心功能及資料
-
檢視(view) – 呈現資訊給使用者(通過有多個檢視)
-
控制器(controller) – 處理使用者的輸入操作
MVC 模式通過將內部資訊表示、使用者資訊呈現以及使用者操作接收分開的方式解耦元件,實現高效程式碼重用。
使用場景
-
主流開發語言所構建的網際網路網頁應用架構
-
Django 與 Rails 等網頁應用開發框架
9. 黑板模式(Blackboard pattern)
黑板模式適用於 無預知確定解決策略 的問題,主要由三個元件構成:
-
黑板(blackboard) – 用於儲存解空間物件的結構化全域性記憶體
-
知識(knowledge)源 – 能自表意的專用模組
-
控制(control)元件 – 選擇、配置與執行的模組
所有的元件均能訪問黑板,元件可將新生成的資料物件寫入黑板,也可以通過模式匹配從黑板中獲取知識源所生成的特定資料。
使用場景
-
語音識別
-
車輛識別和追蹤
-
蛋白質的結構鑑定
-
聲納訊號解析
10. 解析器模式(Interpreter pattern)
解析器模式用於設計語言的解析程式,主要用於指定評估程式程式碼行,即解析出特定語言的語句與表示式,其核心思想是為語言的每個符號定義相應的類。
使用場景
-
SQL 等資料庫查詢語言
-
通訊協議描述語言