10 个常用的软件架构模式
你是否曾經(jīng)思考過如何設(shè)計(jì)大型的企業(yè)級系統(tǒng)?在決定啟動軟件開發(fā)之前,首要的是選擇恰當(dāng)?shù)募軜?gòu)來指引系統(tǒng)的功能及質(zhì)量屬性設(shè)計(jì)。因此在將軟件架構(gòu)應(yīng)用于設(shè)計(jì)之前,必需要了解常用的架構(gòu)模式。
什么是架構(gòu)模式?
Wikipedia 的解釋:
在軟件架構(gòu)中,架構(gòu)模式是對特定環(huán)境下常見問題的通用且可重用的解決方案。架構(gòu)模式與軟件設(shè)計(jì)模式很相似,但架構(gòu)模式的層次更高,且外延更大。
這篇文章將簡述常見的 10 種架構(gòu)模式的概念、用法以及其優(yōu)缺點(diǎn)。
1. 分層模式(Layered pattern)
2. 客戶端/服務(wù)器模式(Client-server pattern)
3. 主/從模式(Master-slave pattern)
4. 管道/過濾器模式(Pipe-filter pattern)
5. 代理模式(Broker pattern)
6. 對等模式(Peer-to-peer pattern)
7. 事件總線模式(Event-bus pattern)
8. 模型/視圖/控制器(MVC)模式(Model-view-controller pattern)
9. 黑板模式(Blackboard pattern)
10. 解析器模式(Interpreter pattern)
1. 分層模式(Layered pattern)
分層模式用于對結(jié)構(gòu)化設(shè)計(jì)的軟件進(jìn)行層次拆解,每個層次為獨(dú)立的抽象,為其上層抽象提供服務(wù)。
系統(tǒng)通常被拆分為以下四個層次:
? 表示層(也稱為 UI 層)
? 應(yīng)用層(也稱為服務(wù)層)
? 業(yè)務(wù)邏輯層(也稱為領(lǐng)域?qū)?#xff09;
? 數(shù)據(jù)訪問層(也稱為持久化層)
使用場景
? 通用桌面應(yīng)用程序
? 電子商務(wù) Web 應(yīng)用
?? ??? ??? ?
2. 客戶端/服務(wù)器模式(Client-server pattern)
客戶端/服務(wù)器模式由兩個部分構(gòu)成:一個服務(wù)器與多個客戶端。服務(wù)器組件同時為多個客戶端組件提供服務(wù)。客戶端向服務(wù)器發(fā)啟服務(wù)請求,服務(wù)器將相應(yīng)服務(wù)信息回應(yīng)給客戶端。此外,服務(wù)器持續(xù)監(jiān)聽來自客戶端的請求。
使用場景
? 電子郵件、文件共享及銀行業(yè)務(wù)等在線應(yīng)用
??
3. 主/從模式(Master-slave pattern)
主/從模式由兩個部分構(gòu)成:主設(shè)備與從設(shè)備。主服務(wù)組件將作業(yè)分發(fā)給多個從設(shè)備組件,并根據(jù)這些從設(shè)備反饋的結(jié)果,計(jì)算生成最終結(jié)果。
使用場景
? 數(shù)據(jù)庫復(fù)制,主數(shù)據(jù)庫被認(rèn)定為權(quán)威數(shù)據(jù)源,各從數(shù)據(jù)庫與主數(shù)據(jù)保持同步
? 在計(jì)算機(jī)系統(tǒng)中通過總線互連的各設(shè)備(包括主設(shè)備與從設(shè)備)
4. 管道/過濾器模式(Pipe-filter pattern)
管道/過濾器模式用于構(gòu)造用于生成及處理數(shù)據(jù)流的系統(tǒng)。每個處理過程都封裝在過濾器(filter)組件之中,要處理的數(shù)據(jù)通過?管道(pips)?進(jìn)行投遞。管道同時用于作為?過濾器(filter)?間的緩沖及同步。
使用場景
? 編譯器,一系列的過濾器用于詞法分析、語法分析、語義分析及代碼生成
? 生物信息學(xué)的工作流
5. 代理模式(Broker pattern)
代理模式用于在結(jié)構(gòu)化系統(tǒng)中對組件解耦。系統(tǒng)內(nèi)各組件間采用遠(yuǎn)過程調(diào)用(remote service invocations)的方式交互。代理(Broker)組件充當(dāng)組件間通訊的協(xié)調(diào)角色。
提供服務(wù)的組件將其能力(服務(wù)以及特性)發(fā)布給代理,客戶端均向代理請求服務(wù),由代理將請求重定向到先前已發(fā)布過對應(yīng)服務(wù)的組件進(jìn)行處理。
使用場景
? 消息中間件軟件:Apache ActiveMQ,Apache Kafka,RabbitMQ 與 JBoss 等等
6. 對等模式(Peer-to-peer pattern)
對等模式中的組件稱之為對等體(peer),對等體既作為向其他對等體請求服務(wù)的客戶端,同時也做為響應(yīng)其他對等體請求的服務(wù)端。對等體可以在運(yùn)行過程中動態(tài)地改變其角色,即,既可以單獨(dú)做為客戶端或服務(wù)端運(yùn)行,又可同時作為客戶端與服務(wù)端運(yùn)行。
使用場景
? 網(wǎng)絡(luò)文件共享:Gnutella?與?G2)
? 流媒體協(xié)議:P2PTV?與?PDTP.
? 流媒體應(yīng)用:?Spotify.
7. 事件總線模式(Event-bus pattern)
事件總線模式應(yīng)用于事件處理,主要由四個組件構(gòu)成:事件源(event source),事件偵聽者(event listener),通道(Channel)以及總線(event bus)。 事件源將消息發(fā)布到總線的特定通道,偵聽者訂閱相應(yīng)的通道,事件源所發(fā)布的消息經(jīng)通道通告給訂閱通道的偵聽者。
使用場景
? Android 開發(fā)
? 通告(Notification)服務(wù)
8. 模型/視圖/控制器(MVC)模式(Model-view-controller pattern)
模型/視圖/控制器模式(簡稱 MVC 模式)將交互式應(yīng)用程序拆分為三個部分:
1. 模型(model)?– 包含核心功能及數(shù)據(jù)
2. 視圖(view)?– 呈現(xiàn)信息給用戶(通過有多個視圖)
3. 控制器(controller)?– 處理用戶的輸入操作
MVC 模式通過將內(nèi)部信息表示、用戶信息呈現(xiàn)以及用戶操作接收分開的方式解耦組件,實(shí)現(xiàn)高效代碼重用。
使用場景
? 主流開發(fā)語言所構(gòu)建的互聯(lián)網(wǎng)網(wǎng)頁應(yīng)用架構(gòu)
? Django?與?Rails?等網(wǎng)頁應(yīng)用開發(fā)框架
9. 黑板模式(Blackboard pattern)
黑板模式適用于?無預(yù)知確定解決策略?的問題,主要由三個組件構(gòu)成:
? 黑板(blackboard)?– 用于存儲解空間對象的結(jié)構(gòu)化全局內(nèi)存
? 知識(knowledge)源 – 能自表意的專用模塊
? 控制(control)組件 – 選擇、配置與執(zhí)行的模塊
所有的組件均能訪問黑板,組件可將新生成的數(shù)據(jù)對象寫入黑板,也可以通過模式匹配從黑板中獲取知識源所生成的特定數(shù)據(jù)。
使用場景
? 語音識別
? 車輛識別和追蹤
? 蛋白質(zhì)的結(jié)構(gòu)鑒定
? 聲納信號解析
10. 解析器模式(Interpreter pattern)
解析器模式用于設(shè)計(jì)語言的解析程序,主要用于指定評估程序代碼行,即解析出特定語言的語句與表達(dá)式,其核心思想是為語言的每個符號定義相應(yīng)的類。
使用場景
? SQL 等數(shù)據(jù)庫查詢語言
? 通訊協(xié)議描述語言
上述架構(gòu)模式的對比
下表格總結(jié)了各架構(gòu)模式的優(yōu)缺點(diǎn)
?
總結(jié)
以上是生活随笔為你收集整理的10 个常用的软件架构模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 废掉一个产品经理最常见的方式,就是天天画
- 下一篇: 如何在 Linux 中使用 find