# 軟體架構模型 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 去做
特色:
- 開發初期必須先完成 UI 設計
- 透過分層溝通限制,來對系統進行解耦
- M、V、P 能夠單獨進行單元測試
- 當架構複雜時有時候一個 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
特色:
- 立即通知且主動更新
- 擅長於處理 Streaming 資料
- 記憶體耗量大
- 執行管理差