MVC vs. MVP vs. 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的基礎上新增一個ViewModel,這個ViewModel除了正常的屬性意外,還包括一些供View顯示用的屬性。例如在經典的MVP中,view有一個屬性ischeck,需要在presenter中設定view的ischeck值。但是在MVVM中的presenter也會有一個ischeck屬性來同步view的ischeck屬性,可能會用到observer模式同步ischeck的值。在MVVM中,presenter被改名為ViewModel,就演變成了你看到的MVVM。在支援雙向繫結的平臺,MVVM更受歡迎。例如:微軟的WPF和Silverlight。
英文原文:MVC vs. MVP vs. MVVM
相關文章
- MVC,MVP,MVVMMVCMVPMVVM
- MVC——MVP——MVVMMVCMVPMVVM
- MVC、MVP、MVVMMVCMVPMVVM
- WebForms VS. MVC(翻譯)WebORMMVC
- MVC和MVVM,MVPMVCMVVMMVP
- 雜談: MVC/MVP/MVVMMVCMVPMVVM
- 淺談MVC/MVP/MVVM模式(概述)MVCMVPMVVM模式
- MVC、MVP和MVVM的區別MVCMVPMVVM
- 深入分析MVC、MVP、MVVM、VIPERMVCMVPMVVM
- MVC,MVP 和 MVVM 的圖示MVCMVPMVVM
- MVC MVP 和 MVVM 的圖示MVCMVPMVVM
- 教你認清MVC,MVP和MVVMMVCMVPMVVM
- 不要再問我MVC、MVP、MVVM了MVCMVPMVVM
- MVC,MVP 和 MVVM 模式如何選擇?MVCMVPMVVM模式
- MVC、MVP和MVVM以及MVA比較MVCMVPMVVM
- 淺談框架模式 MVC、MVP 和 MVVM框架模式MVCMVPMVVM
- git revert .vs. git reset .vs. git rebaseGit
- String.format VS. StrSubstitutor VS. NamedParameterJdbcTemplateORMJDBC
- 搞懂:資料科學vs.機器學習vs.資料分析vs.商業分析資料科學機器學習
- MVC,MVP和MVVM之間的區別MVCMVPMVVM
- 談談對MVC、MVP和MVVM的理解?MVCMVPMVVM
- 淺談Android中的mvc,mvp,mvvmAndroidMVCMVPMVVM
- MVC、MVP、MVVM,我到底該怎麼選?MVCMVPMVVM
- android MVC && MVP && MVVM分析和對比AndroidMVCMVPMVVM
- HTMLCollection vs. NodeListHTML
- PostgreSQL vs. MySQLMySql
- AutoIt vs. QTPQT
- iOS MVC、MVVM、MVP架構模式淺淺析iOSMVCMVVMMVP架構模式
- iOS架構淺談從 MVC、MVP 到 MVVMiOS架構MVCMVPMVVM
- 架構設計的歷史·MVC·MVP·MVVM架構MVCMVPMVVM
- [譯]iOS架構模式——解密MVC、MVP、MVVM和VIPERiOS架構模式解密MVCMVPMVVM
- 淺析前端開發中的 MVC/MVP/MVVM 模式前端MVCMVPMVVM模式
- 【譯】GraphQL vs. RESTREST
- JavaScript運算子:== VS. ===JavaScript
- Accoona VS. GoogleGo
- 大資料檔案格式比較:AVRO vs. PARQUET vs. ORC大資料VR
- Java 下的 JSON庫效能比較:JSON.simple vs. GSON vs. Jackson vs. JSONPJavaJSON
- Android 架構設計:MVC、MVP、MVVM和元件化Android架構MVCMVPMVVM元件化