這篇簡單介紹一下 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 模式為例
再談 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 的套件去實現
沒有留言:
張貼留言