十大常用軟體架構模式簡介

HuihuangZhang發表於2019-04-18

大型的企業級系統是如何設計的呢?想必大家都曾經有過這樣的疑惑。大型軟體開發前,我們必須選擇一種合適的架構,它既要提供我們想要的功能,質量也要過關。因此,在應用不同的架構之前,我們有必要熟悉一下這些架構。

什麼是架構模式?

根據維基百科,

針對軟體架構中給定上下文的常見問題,架構模式是一種通用的、可複用的解決方案。它與軟體設計模式相似,但範圍更廣。

在這篇文章中,我將簡要地說明一下10種常用的架構模式,以及它們的用法和利弊。

  1. 分層模式
  2. 客戶端 – 服務端模式(cs模式)
  3. 主從模式
  4. 管道過濾器模式
  5. 代理模式
  6. 點對點模式
  7. 事件匯流排模式
  8. 模型-檢視-控制器模式(MVC模式)
  9. 黑板模式
  10. 直譯器模式

1. 分層模式

這種模式可用於構建能分解成多組子任務的程式,每個子任務處在特定的抽象級別中。每一層為更高一層提供服務。

以下是最常見的通用資訊系統中的4個層次。

  • 表示層(亦稱為 UI層)
  • 應用層(亦稱為 服務層)
  • 業務邏輯層(亦稱為 領域層)
  • 資料訪問層(亦稱為 持久層)

用法

  • 通用桌面應用
  • 電子商務web應用

分層模式

2. 客戶端-服務端模式

該模式包含一個服務端和多個客戶端。服務端元件給多個客戶端元件提供服務。客戶端向服務端請求服務,服務端提供相關的服務。此外,服務端會持續監聽客戶端的請求。

用法

  • 線上應用,例如電子郵件、檔案共享和儲存。

客戶端-服務端模式

3. 主從模式

該模式包含兩部分;主和從。主元件給相同的從屬元件分配工作,並根據從 從屬元件 中返回的結果計算最終結果.

用法

  • 主伺服器是權威來源,從屬資料庫與其進行同步。
  • 在計算機系統中,外圍裝置連線到匯流排中(主驅動和從屬驅動)。

主從模式

4. 管道過濾模式

該模式可用於構建生成和處理資料流的系統。每個處理步驟包含在一個過濾元件中。待處理的資料通過管道傳遞。這些管道可用於資料快取或同步。

用法

  • 編譯器。連續的過濾器執行詞法分析,解析,語意分析,和程式碼生成。
  • 生物資訊學中的工作流。

管道過濾模式

5. 代理模式

該模式用於構建伴有解耦元件的分散式系統。這些元件通過遠端服務呼叫來和彼此互動。代理元件負責協調元件之間的通訊。

伺服器將其功能(服務和特性)釋出到代理。客戶端從代理請求服務,代理根據登錄檔把客戶端重定向到合適的服務。

用法

代理模式

6. 點對點模式

在該模式中,相同的元件被稱為對等元件。對等體既可以作為客戶端,請求其他對等體的服務,也可以作為服務端,為其他對等體提供服務。一個對等體可以作為客戶端、或者服務端、或者兼任兩者,它能隨著時間動態變更自己的角色。

用法

點對點模式

7. 事件匯流排模式

該模式主要處理事件,並且有4個主要元件:事件源,事件監聽者,事件通道和事件匯流排。事件源釋出訊息到事件匯流排上的特定通道。監聽者訂閱特定通道。如果監聽者訂閱的通道有訊息釋出,那麼監聽者就會得到通知。

用法

  • 安卓開發
  • 通知服務

事件匯流排模式

8. 模型-檢視-控制器模式(MVC模式)

該模式亦被稱為MVC模式,它將互動式應用分成3個部分,

  1. 模型 – 包含核心功能和資料
  2. 檢視 – 給使用者展示資訊(可能不止一個檢視)
  3. 控制器 – 處理使用者的輸入 這樣做的目的是將 資訊的內部表示資訊呈現給使用者並且從使用者獲取的方式 分離開。這樣能解耦元件並且有效重用程式碼。

用法

  • 主要程式語言的全球資訊網應用的體系結構。
  • web框架,例如DjangoRails

MVC模式

9. 黑板模式

該模式可用於沒有已知確定性解決方案策略的問題。黑板模式由3個主要元件組成。

  • 黑板 – 一塊結構化的全域性記憶體,包含解決方案空間的物件。
  • 知識源 – 具有各自代表性的專業模組。
  • 控制元件 – 選擇,配置和執行模組。 所有元件都可以訪問黑板。元件可能會生產新增進黑板的新資料物件。元件在黑板上尋找特定型別的資料,並且可能利用已有的知識源,通過模式匹配的方式來尋找資料。

用法

  • 語音識別
  • 車輛識別和追蹤
  • 蛋白質結構識別
  • 海納訊號解析

黑板模式

10. 直譯器模式

該模式用於設計 用來解釋專用語言寫成的程式 的元件。它主要指明如何評估程式的行,即用特定語言編寫的語句或表示式。基本想法是為語言的每個符號設定一個類。

用法

  • 資料庫查詢語言,例如SQL。
  • 計算機語言用來描述通訊協議。

直譯器模式

架構模式的優劣比較

下面的圖表總結了各種架構模式的優劣。

各種架構模式

名字 優勢 劣勢
分層模式 低層級的元件能被不同的高層級元件呼叫。可以清晰地定義層級,所以層級化更容易標準化。當在層級內改動時不會影響到其他層級 不是普遍適用的。在某種情況下,某些層級可能會被跳過
客戶端-服務端模式 能很好地對客戶端請求的服務進行建模 請求被分到服務端的不同的執行緒中處理。因為不同的客戶端有不同的展示形式,程式間通訊會導致額外開銷。
主從模式 準確性 – 服務被代理到具有不同實現的從屬元件中執行 從屬元件彼此隔離:之間沒有共享狀態。主從通訊的延遲在某些場景下是個問題,例如實時系統。這種模式只可以被用來解決能被分解的問題。
管道過濾模式 並行處理。當輸出和輸出都是流資料,過濾器一旦收到資料便開始計算。易於增加過濾器,系統擴充套件性好。過濾器可以複用。可以通過已有過濾器的重新組合來構建不同的管道 效率會受限於最慢的過濾處理器。把資料從一個過濾器轉移到另一箇中時,存在資料轉換的開銷。
代理模式 允許物件動態變化,增加、減少和遷移,並且物件分佈對開發者是透明的。 需要服務描述標準化。
點對點模式 支援分散式計算。對於任意失敗節點的高健壯性。取決於資源和計算效率的高擴充性。 由於各個節點是自願合作的,服務質量無法保證。安全性很難保證。效能取決於節點數量。
事件匯流排模式 易於新增釋出者、訂閱者和連線。該模式對於高分散式應用很奏效。 該模式的可擴充性可能是個問題,因為所有訊息都通過同一個事件匯流排傳輸。
模型-檢視-控制器模式 相同的模型可以輕鬆擁有多個檢視,可以在執行時建立連線和斷開連線。 複雜度增加。可能導致使用者操作的許多不必要的更新。
黑板模式 易於新增應用。易於擴充套件資料空間的結構。 很難修改資料空間的結構,因為會影響所有應用。可能需要同步和訪問控制。
直譯器模式 有可能實現高度動態行為。有利於終端使用者的可程式設計性。提高靈活性,因為易於替換解釋程式碼。 因為解釋語言的執行速度一般比編譯語言慢,所以效能可能是個問題。

相關文章