軟體架構模型 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資料
- 記憶體耗量大
- 執行管理差