淺談Android MVC、MVP和MVVM

一、MVC(Model,View,Controller)
MVC模式是最經(jīng)典開(kāi)發(fā)模式之一,它分為三個(gè)部分Model,View,Controller。

image.png

模型層(Model):數(shù)據(jù)模型,是對(duì)客觀事物的抽象。
視圖層(View):用戶(hù)界面,是model的具體表現(xiàn)形式。
控制器層(Controller):業(yè)務(wù)邏輯,主要負(fù)責(zé)與model和view打交道。

適用場(chǎng)景:適用于較小,功能較少,業(yè)務(wù)邏輯較少的項(xiàng)目。

MVC的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、業(yè)務(wù)邏輯全部分離到Controller中,模塊化程度高。
2、觀察者模式可以做到多視圖同時(shí)更新。
缺點(diǎn):
1、Model和View之間是直接進(jìn)行交互,就必然會(huì)導(dǎo)致Model和View之間的耦合。
2、所有邏輯都寫(xiě)在Controller層,導(dǎo)致Controller層特別臃腫。

二、MVP(Model,View,Presenter)
MVC架構(gòu)方式的變種,使用Presenter來(lái)代替Controller,而且改變了數(shù)據(jù)的流向,View和Model之間不再直接進(jìn)行交互,而是全部通過(guò)Presenter來(lái)進(jìn)行。MVP模式就是把MVC模式中的Controller換成了Presenter。

image.png

在MVP當(dāng)中,Presenter可以同時(shí)操作View和Model,View需要提供一組對(duì)界面操作的接口給Presenter進(jìn)行調(diào)用;Model仍然通過(guò)事件廣播自己的變更,但由Presenter監(jiān)聽(tīng)而不是View。View 與 Model 不發(fā)生聯(lián)系,都通過(guò) Presenter 傳遞。

適用場(chǎng)景:視圖界面不是很多的項(xiàng)目中。

MVP的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、模型與視圖完全分離,我們可以修改視圖而不影響模型。
2、可以更高效地使用模型,因?yàn)樗械慕换ザ及l(fā)生在一個(gè)地方——Presenter內(nèi)部。
3、我們可以將一個(gè)Presenter用于多個(gè)視圖,而不需要改變Presenter的邏輯。這個(gè)特性非常的有用,因?yàn)橐晥D的變化總是比模型的變化頻繁。
4、如果我們把邏輯放在Presenter中,那么我們就可以脫離用戶(hù)接口來(lái)測(cè)試這些邏輯(單元測(cè)試)。
缺點(diǎn):Presenter作為橋梁協(xié)調(diào)View和Model,就會(huì)導(dǎo)致Presenter變得很臃腫,維護(hù)比較困難。

三、MVVM(Model,View,ViewModel)
MVVM其實(shí)是對(duì)MVP的一種改良,他將Presenter替換成了ViewModel,并通過(guò)雙向的數(shù)據(jù)綁定來(lái)實(shí)現(xiàn)視圖和數(shù)據(jù)的交互。

image.png

適用場(chǎng)景:適用于界面展示的數(shù)據(jù)較多的項(xiàng)目。

MVVM的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、低耦合。視圖(View)可以獨(dú)立于Model變化和修改,一個(gè)ViewModel可以綁定到不同的"View"上,當(dāng)View變化的時(shí)候Model可以不變,當(dāng)Model變化的時(shí)候View也可以不變。
2、可重用性。你可以把一些視圖邏輯放在一個(gè)ViewModel里面,讓很多view重用這段視圖邏輯。
3、獨(dú)立開(kāi)發(fā)。開(kāi)發(fā)人員可以專(zhuān)注于業(yè)務(wù)邏輯和數(shù)據(jù)的開(kāi)發(fā)(ViewModel),設(shè)計(jì)人員可以專(zhuān)注于頁(yè)面設(shè)計(jì),使用Expression Blend可以很容易設(shè)計(jì)界面并生成xml代碼。
4、可測(cè)試。界面素來(lái)是比較難于測(cè)試的,而現(xiàn)在測(cè)試可以針對(duì)ViewModel來(lái)寫(xiě)。
5、提高可維護(hù)性。解決了MVP大量的手動(dòng)View和Model同步的問(wèn)題,提供雙向綁定機(jī)制。提高了代碼的可維護(hù)性。
缺點(diǎn):
1、過(guò)于簡(jiǎn)單的圖形界面不適用。
2、對(duì)于大型的圖形應(yīng)用程序,視圖狀態(tài)較多,ViewModel的構(gòu)建和維護(hù)的成本都會(huì)比較高。
3、數(shù)據(jù)綁定的聲明是指令式地寫(xiě)在View的模版當(dāng)中的,這些內(nèi)容是沒(méi)辦法去打斷點(diǎn)debug的。
4、目前這種架構(gòu)方式的實(shí)現(xiàn)方式比較不完善規(guī)范,常見(jiàn)的就是DataBinding框架。

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

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

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