MVC模式-MVP模式和MVVM

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,反之亦然。

------------------華麗的分割線------------------

參考鏈接:
  1. segmentfault
  2. 博客園
  3. 簡書
  4. 極簡
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容