開發模式總結:MVC、MVP-MVVM

1 簡介

三者的目的都是分離關注,使得 UI 更容易變換(從 Winform 變爲 Webform),使得 UI 更容易進行單元測試。

2 MVC MVP

2.1 MVC

  1、View 接受用戶的交互請求,

  2、View 將請求轉交給 Controller,

  3、Controller 操作 Model 進行數據更新

  4、數據更新之後,Model 通知 View 數據變化

  5、View 顯示更新之後的數據

View 和 Controller 使用 Strategy 模式實現,View 使用 Composite 模式,View 和 Model 通過 Observer 模式同步信息。Controller 不知道任何 View 的細節,一個 Controller 能被多個 View 使用。MVC 的一個缺點是很難對 controller 進行單元測試,Controller 操作數據,但是如何從 View 上斷言這些數據的變化呢?例如,點擊一個 View 的按鈕,提交一個事件給 Controller,Controller 修改 Model 的值。這個值反映到 View 上是字體和顏色的變化。測試這個 Case 還是有點困難的。

2.2 MVP

  1、 View 接受用戶的交互請求

  2、 View 將請求轉交給 Presenter

  3、 Presenter 操作 Model 進行數據庫更新

  4、 數據更新之後,Model 通知 Presenter 數據發生變化

  5、 Presenter 更新 View 的數據

Presenter 將 Model 的變化返回給 View。和 MVC 不同的是,presenter 會反作用於 view,不像 controller 只會被動的接受 view 的指揮。正常情況下,發現可以抽象 view,暴漏屬性和事件,然後 presenter 引用 view 的抽象。這樣可以很容易的構造 view 的 mock 對象,提高可單元測試性。在這裏,presenter 的責任變大了,不僅要操作數據,而且要更新 view。

在現實中 mvp 的實現會根據 view 的充、貧血而有一些不同,一部分傾向於在 view 中放置簡單的邏輯,在 presenter 放置複雜的邏輯,另一部分傾向於在 presenter 中放置全部的邏輯。這兩種分別被稱爲:Passive View 和 Superivising Controller。

在 Passive View 中,爲了減少 UI 組件的行爲,使用 controller 不僅控制用戶事件的響應,而且將結果更新到 view 上。可以集中測試 controller,減小 view 出問題的風險。

在 Superivising Controller 中的 controller 既處理用戶輸入的響應,又操作 view 處理 view 的複雜邏輯。

3 M-V-VM

MVVM 模式是 Model-View-ViewMode 模式的簡稱。由視圖 (View)、視圖模型(ViewModel)、模型(Model) 三部分組成,結構如下圖。通過這三部分實現 UI 邏輯、呈現邏輯和狀態控制、數據與業務邏輯的分離。

MVVM 是在原有領域 Model 的基礎上添加一個 ViewModel,這個 ViewModel 除了正常的屬性意外,還包括一些供 View 顯示用的屬性。例如在經典的 MVP 中,view 有一個屬性 ischeck,需要在 presenter 中設置 view 的 ischeck 值。但是在 MVVM 中的 presenter 也會有一個 ischeck 屬性來同步 view 的 ischeck 屬性,可能會用到 observer 模式同步 ischeck 的值。在 MVVM 中,presenter 被改名爲 ViewModel,就演變成了你看到的 MVVM。在支持雙向綁定的平臺,MVVM 更受歡迎。例如:微軟的 WPF 和 Silverlight。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/0FbiUMkdFj7l0q-EENBQ_Q