2014年9月16日 星期二

Passive View vs Supervising Controller

MVP (Model View Presenter) 設計模式 中有詳細介紹了什麼是 MVP 設計模式

這篇簡單介紹一下 MVP 中可以運用的兩種變型,分別是 Passive View 與 Supervising Controller

如果想要對這兩種設計模式想更進一步了解可以看看 Martin Fowler大師的介紹


Passive View(PV) 從字面上來看就是"被動的視圖",簡單說就是 View 只負責顯示,

並由 Controller 或是 Presenter 負責處理使用者的動作 (action),也就是 View 都是被動的

只能透過 Controller 或是 Presenter 給的命令 (command) 來做事情

採用 PV 的好處是可以讓你容易獨立的測試 Controller 或是 Presenter,而且不需依賴任何 UI 測試框架

但我認為這前提是你的 View 與 Presenter 或是 Controller 的關係要盡量是鬆散耦合的

也就是說當有任何的使用者互動,View 都是發出事件(Event)給 Controller 或是 Presenter

來處理,且送出去的資料盡量都不要跟 View 有任何一點關係



這樣才容易達到測試 Controller 或是 Presenter 且不需任何 UI 測試框架的輔助

接下來介紹的是 Supervising Controller (SC),或是可以稱作 Supervising Presenter (SP)

再談 Supervising Controller 之前一定要先了解什麼是 Data Binding

Data Binding 就是將 Model 與 View 的資料做繫結的動作

當任何一方的資料更動,另外一方的資料也會自動更新,這在 GUI 的開發上是蠻重要的功能

例如 AngularJS 的 Two-way Binding

以原本的 MVP 模式為例

Presenter 跟 Model 要到資料之後會再經由  Presenter 本身再回傳給 View,讓 View 負責去呈現

而 SC 的改變在於讓上述這段過程自動地在 View 與 Model 之間發生,如下圖


在 Data Binding 這塊可以透過其他 UI 框架完成也可以自己建構,AngularJS 就完全不必擔心這部份

Backbone.js 的話可以透過額外的套件做到這樣的效果,畢竟 Backbone.js 並沒有這樣雙向 binding 的機制

至於採用 SC 或 SP 的好處在於減低 Controller 或是 Presenter 的負擔,讓資料 Sync 的事情交給

專門處理 Data Binding 的套件去實現

沒有留言:

張貼留言