MVC模式原理
MVC,即Model-View-Controller,意味:模型、視圖和控制器。
-
Model
- 程序需要操作的數(shù)據(jù)來源。通常是從數(shù)據(jù)庫、網(wǎng)絡(luò)請求或者是
Bean數(shù)據(jù)。 - 負(fù)責(zé)提供數(shù)據(jù)
- 程序需要操作的數(shù)據(jù)來源。通常是從數(shù)據(jù)庫、網(wǎng)絡(luò)請求或者是
-
View
- 程序用來展示內(nèi)容的界面。通常是
Activity、Fragment等UI組件。 - 負(fù)責(zé)展示數(shù)據(jù)
- 程序用來展示內(nèi)容的界面。通常是
-
Controller
- 程序中用于處理
Model數(shù)據(jù)業(yè)務(wù)邏輯并將結(jié)果輸送給View的中間層。 - 負(fù)責(zé)處理業(yè)務(wù)邏輯
- 程序中用于處理

MVC模式流程.png
實際開發(fā)中
Activity究竟算Controller還是View說不清楚。理論上Activity是UI組件負(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ā)中類似Activity的UI卻做了很多View相關(guān)操作。VC分離不清。 - 優(yōu)點中的耦合性低是相對的,現(xiàn)實中
MVC的耦合性確實不低!
-
MVP模式原理
知道了MVC的不足之處,MVP就是為了解決VC耦合這個問題,在MVC的基礎(chǔ)上變種出來的框架。
M幾乎沒有變化,只是把VC抽出來變成了VP。
MVP核心思想:
MVP把Activity中的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),由Activity、Fragment等UI組件實現(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要清晰多了
- 結(jié)構(gòu)清晰,比
- 缺點
- 每個
View都有個Presenter,多了也是個麻煩~
- 每個
MVVM模式原理
MVVM模式利用了一個工具DataBinding實現(xiàn)了其中的VM。將數(shù)據(jù)和View綁定在一起,這樣一來,數(shù)據(jù)發(fā)生改變,View會即時更新。
-
Model
-
Model還是原來的Model,負(fù)責(zé)提供實體模型。供VM使用。
-
-
View
-
Activity、Fragment以及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變化,ViewModel和View自動更新(角度不一樣而已)。 - 模塊之間職責(zé)更清晰。
- 控制器功能大都到了
View上,大大減輕壓力。
-
雙向綁定技術(shù),
- 缺點
-
DataBinding后很難進(jìn)行調(diào)試,出現(xiàn)問題很難進(jìn)行定位。 - 大項目中
Model會很大,長期占有不能釋放會占內(nèi)存。 -
View的重用性降低,MVVM中的一個View綁定一個Model。不同模塊的View都不同,重用困難。
-