# 軟體架構模型 Architectural Pattern

當我們剛開始學習 軟體設計的時候 都會根據書本或是相關教學文章進行軟體架構設計,但事實上軟體設計不是死的,就像以往的 Design Pattern 需要根據系統需求來進行調整。


# MVC Pattern

剛入門軟體設計最耳熟能祥的軟體架構模型,MVC Pattern 在非常早期就出現了,當初由 Trygve Reenskaug 在 1978 年提出,將不同專業的人員能夠適當的分組

MVC(Model,View,Controller)

  • Model (模型)
    • 代表某種同類型同領域的實作或模擬
    • 在同一個 Model 中將演算法或商業邏輯與資料模型分配至不同的模組中
    • 其中 DBA 負責軟體相關的資料庫設計,Programmer 負責撰寫演算法或商業邏輯
  • View (視圖)
    • 泛指 User 能夠看到的介面 (UI)
    • 由 UI Designer 負責相關業務
  • Controller (控制器)
    • 是整個服務的 Entry,將服務的 Route 架設起來根據 Request 進行業務分配。

特色:

強調職責分離: UI Designer 能夠專心設計界面,DBA 專心設計資料庫,Programmer 設計演算法,將系統的 UI 與邏輯進行分離,達到快速分工與建置系統

MVC Pattern 真的蠻古老的,因此在現代的軟體設計中也出現了很多的 MVC 變種 如:Django 的 MTV 等。


# MVP Pattern

MVP Pattern 是一個 UI 介面開發的一種軟體架構,看到 MVP 怎麼看起來感覺跟 MVC 長很像,事實上 MVP 就是從 MVC 變形而來的,保留了 MVC 快速分工的優點。

MVP(Model,View,Presenter)

  • Model
    • 定義系統所需物件及物件所需行為,會在 UI 呈現或者在資料操作時會用到
  • View
    • UI 層,將該呈現的資料呈現在介面上
  • Presenter
    • Model & View 的 Mediator,當 Model 資料要投入至 View 之前可能需要做一些處理,就是交給 Presenter 去做

特色:

  1. 開發初期必須先完成 UI 設計
  2. 透過分層溝通限制,來對系統進行解耦
  3. M、V、P 能夠單獨進行單元測試
  4. 當架構複雜時有時候一個 View 會需要由多個 Presenter 處理,可能會造成當其中一個 Presenter 但其他 Presenter 無法得知該 Presenter 的狀態更新。

# MVVM Pattern

MVVM (Model-View-ViewModel) 又稱 Model-View-Binder 相較於 MVC、MVP Pattern 較晚出現,在 APP 及前端框架中常使用。

MVVM(Model-View-ViewModel)

  • Model
    • 定義系統所需物件及物件所需行為,會在 UI 呈現或者在資料操作時會用到
  • View
    • UI 層,將該呈現的資料呈現在介面上
  • ViewModel(Binder)
    • 將 Model 繫結於 View 上的單元,當 View 接受到新的 User Input 會被 View 主動通知且更新 Model

特色:

  1. 立即通知且主動更新
  2. 擅長於處理 Streaming 資料
  3. 記憶體耗量大
  4. 執行管理差

# SOA Pattern


# MicroService Pattern