MVC螟深、MVP柔吼、MVVM
- 功能模塊化 —— 內(nèi)部高聚合、模塊功能低耦合
- 提高開發(fā)效率——視圖顯示牺陶、業(yè)務(wù)處理伟阔、數(shù)據(jù)處理
- 提高測試效率——方便測試、定位問題
MVC
- M(Model) ——模型層——業(yè)務(wù)邏輯/數(shù)據(jù)存儲 ——外觀類/接口訪問
- V(View) ——視圖層——展示潔面/接收輸入 ——XML/Activity
- C(Controller)——控制層——業(yè)務(wù)邏輯/連接M&C——Activity
1.- UI 變化操作 -
2.需修改model的數(shù)據(jù)?? 2.通知修改??
用戶輸入—— —— ——View —— —— —— —— ——Controller—— —— —— —— ——Model
??修改通知 ??需修改的UI
2. --- 直接通知修改Model層的數(shù)據(jù) ---
描述:
1.view 接收用戶的輸入
2.需UI變化操作(不涉及業(yè)務(wù)的調(diào)用)即可直接與Controller交互即可
3.需要修改Model數(shù)據(jù)掰伸,即需要通過Controller才能修改的
view層可直接更新Model的數(shù)據(jù)而不必通過Controller
4.Model層數(shù)據(jù)發(fā)生變化皱炉,若需要修改UI,則需要通過Controller對View的通知修改UI
缺點:
1.Activity 責任不分明狮鸭,十分臃腫
2.Activity 由于生命周期的功能處理承擔View層的職責(接收用戶操作合搅、加載應用布局),還需承擔Controller層的職責
3.隨著界面增多和邏輯復雜度提高歧蕉,Activity的代碼量增加灾部,更加臃腫
MVP
解決MVC的Activity臃腫問題,分離了Activity重的View層和Controller層的職責惯退,從而對Activity的代碼量進行優(yōu)化赌髓、瘦身,所以出現(xiàn)了MVP
- M(Model) ——模型層——業(yè)務(wù)邏輯/數(shù)據(jù)儲存——外觀類/接口訪問
- V (View) ——視圖層——View繪制/用戶交互——XML/Activity
- P (presenter)——呈現(xiàn)層——業(yè)務(wù)邏輯/連接M&V——接口
需修改的Model層實例?? 通知修改??
用戶輸入—— —— ——View—— —— —— ——Presenter—— —— —— ——Model
??通知修改 ??需修改UI
描述:
1.View層接收用戶輸入
2.View層與Model交互必須通過Presenter
優(yōu)點:
1.低耦合催跪,通過Presenter 實現(xiàn)數(shù)據(jù)和視圖層的交互锁蠕,完全隔離了View和Model層,二者互不干涉
避免了View和Model的直接聯(lián)系懊蒸,通過Presenter實現(xiàn)兩者溝通
2.Activity代碼更加簡潔荣倾,簡化Activity的職責。僅負責UI相關(guān)操作骑丸,其余復雜的邏輯代碼提取到Presenter層
MVVM
為了更加分離Model和View層 舌仍,釋放Activity的壓力妒貌。于是出現(xiàn)了MVVM
- M(Model) ——模型層——業(yè)務(wù)邏輯/數(shù)據(jù)儲存——外觀類/接口訪問
- V (View) ——視圖層——View繪制/用戶交互——XML/Activity
- VM(ViewMode)——View的數(shù)據(jù)模型和Presenter的結(jié)合體
修改Model層?? 通知修改??
用戶輸入—— —— ——View—— —— ——DataBinding—— —— ——ViewMode—— —— ——Model
??通知修改 ??需修改UI
優(yōu)點:
1.View層和Controller層直接耦合程度進一步降低,分離更徹底抡笼,減輕了Activity的壓力
MVC和MVP的區(qū)別
1.層及含義
MVC:V對應的是 布局文件&Activity
MVP:V對應的是Activity苏揣,簡化了Activity 的職責
2.業(yè)務(wù)邏輯處理方式
MVC:Controller
MVP:Presenter
3.View與Model的交互
MVC 直接、間接
MVP 必須經(jīng)過Presenter (完全隔離了View&Model)
4.View與業(yè)務(wù)邏輯的交互
MVC:Activity(Controller層)
MVP:接口(Presenter層)
三種模式出現(xiàn)的初衷
1.MVC
為解決程序模塊化問題推姻,于是MAVC模式出現(xiàn)了平匈,將業(yè)務(wù)邏輯、數(shù)據(jù)處理藏古、與界面顯示分離出來增炭。即形成了M、V拧晕、C層
2.MVP
在MVC模式中隙姿,M層和C層還是相互交互,隔離度不夠厂捞,同時寫到Activity使得Activity代碼臃腫输玷,于是出現(xiàn)了MVP,隔離了M層和V層直接連接靡馁,釋放了Activity的壓力
3.MVVM
為了更加分離M層和V層欲鹏,釋放Activity的壓力,于是出現(xiàn)了MVVM臭墨,使得M層和C層的耦合度更加降低赔嚎,分離了更加徹底,更加減輕了Activity的壓力
轉(zhuǎn)自:https://juejin.im/entry/5d632c296fb9a06afc254d58?utm_source=gold_browser_extension