軟體架構模型 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