MVC、MVP和MVVM原理和比較

MVC模式原理

MVC,即Model-View-Controller,意味:模型、視圖和控制器。

  • Model
    • 程序需要操作的數(shù)據(jù)來源。通常是從數(shù)據(jù)庫、網(wǎng)絡(luò)請求或者是Bean數(shù)據(jù)。
    • 負(fù)責(zé)提供數(shù)據(jù)
  • View
    • 程序用來展示內(nèi)容的界面。通常是Activity、FragmentUI組件。
    • 負(fù)責(zé)展示數(shù)據(jù)
  • Controller
    • 程序中用于處理Model數(shù)據(jù)業(yè)務(wù)邏輯并將結(jié)果輸送給View的中間層。
    • 負(fù)責(zé)處理業(yè)務(wù)邏輯
MVC模式流程.png

實際開發(fā)中Activity究竟算Controller還是View說不清楚。理論上ActivityUI組件負(fù)責(zé)展示內(nèi)容,但很多項目中Activity處理了太多的業(yè)務(wù)邏輯操作。超過1000行代碼太常見了。根據(jù)這種情況我將Activity放到Controller上。只是個人習(xí)慣而已!

優(yōu)缺點

  • 優(yōu)點
    • 耦合性低:視圖層和業(yè)務(wù)層分離。
    • 重用性高:多個View能共享同一個Model。
    • 部署快:責(zé)任分離,各司其職,職責(zé)清晰。
    • 可維護(hù)性高
  • 缺點
    • Controller角色比重太大。雖然擔(dān)任控制器的職責(zé),但現(xiàn)實開發(fā)中類似ActivityUI卻做了很多View相關(guān)操作。VC分離不清。
    • 優(yōu)點中的耦合性低是相對的,現(xiàn)實中MVC的耦合性確實不低!

MVP模式原理

知道了MVC的不足之處,MVP就是為了解決VC耦合這個問題,在MVC的基礎(chǔ)上變種出來的框架。

M幾乎沒有變化,只是把VC抽出來變成了VP。

MVP核心思想

MVPActivity中的UI邏輯抽象成View接口,把業(yè)務(wù)邏輯抽象成Presenter接口,Model類還是原來的Model。

減輕了Activity的工作,因為大部分工作都丟到了Presenter那去了。自己只要管理好生命周期即可。

MVP模式.png

根據(jù)上圖,代碼所需的實現(xiàn):

  • 創(chuàng)建IPresenter表示業(yè)務(wù)邏輯接口,由PresenterImpl實現(xiàn)
  • 創(chuàng)建IView接口表示UI邏輯實現(xiàn),由ActivityFragmentUI組件實現(xiàn)
  • Activity關(guān)聯(lián)PresenterImpl用于調(diào)用業(yè)務(wù)方法
  • PresenterImpl關(guān)聯(lián)Activity用于調(diào)用UI方法
  • Model木有變化,還是原來的Model~?(?*)

優(yōu)缺點

  • 優(yōu)點
    • 結(jié)構(gòu)清晰,比MVC要清晰多了
  • 缺點
    • 每個View都有個Presenter,多了也是個麻煩~

MVVM模式原理

MVVM模式利用了一個工具DataBinding實現(xiàn)了其中的VM。將數(shù)據(jù)和View綁定在一起,這樣一來,數(shù)據(jù)發(fā)生改變,View即時更新。

  • Model
    • Model還是原來的Model,負(fù)責(zé)提供實體模型。供VM使用。
  • View
    • ActivityFragment以及View組件,這一塊只包含UI相關(guān)代碼。不含有一點業(yè)務(wù)邏輯代碼。
    • 這才是真正的View模塊,View模塊就應(yīng)該只負(fù)責(zé)UI邏輯。
  • ViewModel
    • 只負(fù)責(zé)業(yè)務(wù)邏輯
    • Model提供的實體數(shù)據(jù)View中真正展示數(shù)據(jù)的UI組件通過DataBinding綁定在一起。
    • 我們就不用像以前那樣,等Bean改變后,get里面的屬性值。然后獲取UI組件的引用,將屬性值設(shè)置到UI組件上。
    • VM綁定在一起,Model一改變,View自動實時更新!
MVVM模式.png

優(yōu)缺點

  • 優(yōu)點
    • 雙向綁定技術(shù),Model變化,View自動更新。或者說,Model變化,ViewModelView自動更新(角度不一樣而已)。
    • 模塊之間職責(zé)更清晰。
    • 控制器功能大都到了View上,大大減輕壓力。
  • 缺點
    • DataBinding很難進(jìn)行調(diào)試,出現(xiàn)問題很難進(jìn)行定位。
    • 大項目中Model會很大,長期占有不能釋放會占內(nèi)存
    • View重用性降低MVVM中的一個View綁定一個Model。不同模塊的View都不同,重用困難。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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