一.MVC
MVC是Model-View-Controller的縮寫(xiě)攀圈,從字面意思可以拆分成如下結(jié)構(gòu):
Model 模型:
封裝了業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及處理方法View 視圖:
用于渲染頁(yè)面,(對(duì)應(yīng)了布局以及各類(lèi)控件)Controller 控制器:
用于連接View和Model峦甩,處理流程以及頁(yè)面之間的邏輯(對(duì)應(yīng)了Activity及Fragment)
MVC的特點(diǎn)
它將數(shù)據(jù)赘来、視圖、控制分開(kāi)凯傲,實(shí)現(xiàn)了松耦合犬辰。
- View將事件傳遞到Controller中
- Controller完成想要業(yè)務(wù)后改變Model狀態(tài)
- Model更新View
MVC的優(yōu)點(diǎn)
- 實(shí)現(xiàn)了解耦合,修改其中一層時(shí)冰单,不用修改另外兩層代碼
- 可維護(hù)性高,松耦合也就意味著維護(hù)起來(lái)更加方便
- 重用性高
MVC的缺點(diǎn)
- 由于控件的數(shù)據(jù)綁定都需要在A(yíng)ctivity中完成,Activity/Fragment在View與Controller的定義中有點(diǎn)模糊异旧。
- 伴隨著業(yè)務(wù)的增加莱褒,Controller容易變得臃腫。
二.MVP
MVP(Model-View-Presenter)是MVC的改良模式荒叼。與MVP一樣缘厢,實(shí)現(xiàn)了視圖、模型甩挫、控制的解耦贴硫,重點(diǎn)是改變的通信方式。
Android的MVP實(shí)現(xiàn)
MVP的特點(diǎn)
- View接受事件伊者,傳遞給Presenter
- Presenter做邏輯處理英遭,修改Model
- Model通知Presenter數(shù)據(jù)變化,Presenter更新View
MVP的優(yōu)點(diǎn)
- 將Model與View完全分隔亦渗,提高了可擴(kuò)展性挖诸。
- 便于測(cè)試。在測(cè)試Presenter時(shí)法精,只要實(shí)現(xiàn)View的接口并注入到Presenter就可以測(cè)試Presenter的業(yè)務(wù)邏輯多律。
MVP的缺點(diǎn)
- 與MVC一樣,P層起到的控制功能伴隨著業(yè)務(wù)的增多搂蜓,也會(huì)變得臃腫狼荞。
- Presneter需要持有View的引用,同時(shí)View也需要持有Presenter的引用帮碰,控制上存在一定復(fù)雜度相味。
三.MVVM
MVVM實(shí)現(xiàn)了數(shù)據(jù)與UI的雙重綁定,其中DataBinding是實(shí)現(xiàn)MVVM的關(guān)鍵工具殉挽。
- Model
與MVC和MVP一樣丰涉,Model層保存了業(yè)務(wù)數(shù)據(jù)與處理方法 - View
對(duì)應(yīng)Activity以及XML拓巧,但是比起MVC與MVP框架中的View層,更加簡(jiǎn)潔 - ViewModel
負(fù)責(zé)實(shí)現(xiàn)View與Model的交互一死,將兩者分離
MVVM的特點(diǎn)
- View接受事件肛度,轉(zhuǎn)交給ViewModel
- ViewModel操作Model更新數(shù)據(jù)
- Model更新后通知ViewModel,ViewModel更新View數(shù)據(jù)
MVVM的優(yōu)點(diǎn)
- 低耦合投慈。由于ViewModel的存在,View可以獨(dú)立于Model變化與修改承耿;同理,Model也可以獨(dú)立于View變化與修改逛裤。
- 可重用性瘩绒。一個(gè)ViewModel可被多個(gè)View重復(fù)綁定,實(shí)現(xiàn)同一組業(yè)務(wù)带族。
- ViewModel中解決了MVP中V-P互相持有引用的問(wèn)題锁荔,使得結(jié)構(gòu)更清晰,簡(jiǎn)潔
MVVM的缺點(diǎn)
- ViewModel持有Model的依賴(lài)蝙砌。
- 數(shù)據(jù)綁定方式使得bug難以確定是在View中還是在Model中阳堕。