MVC模式:

image.png
- MVC的所有通信都是單向的。
- view傳送指令到controller(用戶也可以直接將指令傳到controller)。
- controller完成業(yè)務(wù)邏輯后要求model改變狀態(tài)。
- model將新的數(shù)據(jù)發(fā)送到view,用戶得到反饋。
MVP模式:
MVP模式將Controller改名為Presenter,同時改變了通信方向。

image.png
- 各部分之間的通信都是雙向的。
- View與Model不發(fā)生聯(lián)系,都通過Presenter傳遞
- View非常薄,不部署任何業(yè)務(wù)邏輯,稱為“被動視圖”,即沒有任何主動性,而Presenter非常厚,所有邏輯都部署在這里
MVVM模式:

image.png
- View和Model之間沒有聯(lián)系,通過ViewModel進(jìn)行交互
- View可獨(dú)立于Model變化和修改,一個ViewModel可以綁定到不同的View上,當(dāng)View變化的時候Model可以不變,當(dāng)Model變化的時候View也可以不變。
- Model和ViewModel之間的交互是雙向的,因此視圖的數(shù)據(jù)的變化會同時修改數(shù)據(jù)源,而數(shù)據(jù)源數(shù)據(jù)的變化也會立即反應(yīng)到View上。
- 一些視圖邏輯可以放在一個ViewModel里面,讓很多view重用這段視圖邏輯。
- 可測試。界面素來是比較難于測試的,而現(xiàn)在測試可以針對ViewModel來寫。
區(qū)別:
MVP與MVC區(qū)別:
- 在MVC里,View是可以直接訪問Model的!從而,View里會包含Model信息,不可避免的還要包括一些業(yè)務(wù)邏輯。 在MVC模型里,更關(guān)注的Model的改變,而同時有多個對Model的不同顯示,即View。
- 在MVC模型里,Model不依賴于View,但是View是依賴于Model的。不僅如此,因?yàn)橛幸恍I(yè)務(wù)邏輯在View里實(shí)現(xiàn)了,導(dǎo)致要更改View也是比較困難的,至少那些業(yè)務(wù)邏輯是無法重用的
- 在MVP中View并不直接使用Model,它們之間的通信是通過Presenter來進(jìn)行的,所有的交互都發(fā)生在Presenter內(nèi)部。
- Presenter與具體的View是沒有直接關(guān)聯(lián)的,而是通過定義好的接口進(jìn)行交互,從而使得在變更View時候可以保持Presenter的不變,即重用!
MVVM與MVP區(qū)別:
- mvvm模式基本與MVP模式完全一致,唯一的區(qū)別是,它采用雙向綁定(data-binding): View的 變動,自動反映在View Model,反之亦然。