一,MVC
mvc的即model數(shù)據(jù)模型層,view視圖層,controller控制層;
view層主要是xml布局文件,model層主要是數(shù)據(jù)模型,controller層主要說(shuō)的是Activity.
mvc的簡(jiǎn)單流程:
view層向controller層發(fā)出指令到controller層,
controller通知model層去更新數(shù)據(jù),
model層數(shù)據(jù)更新之后,直接將數(shù)據(jù)顯示在view層.
這就是mvc的工作原理
mvc的優(yōu)點(diǎn):
如果邏輯非常簡(jiǎn)單,mvc還是一個(gè)非常不錯(cuò)的選擇,因?yàn)闀?huì)降低代碼量.
mvc的缺點(diǎn):
view層的控制能力太弱,如果我們想動(dòng)態(tài)改變一個(gè)頁(yè)面的背景,或動(dòng)態(tài)顯示/隱藏一個(gè)按鈕,這些都沒(méi)辦法在xml文件中直接定義,需要在Activity中進(jìn)行動(dòng)態(tài)設(shè)置,這時(shí),Activity既是controller層,又是view層,會(huì)造成Activity中的代碼量過(guò)于臃腫,雜亂.
view層和model層是可以直接交互的,證明view層和model層存在耦合性,這對(duì)于代碼的維護(hù)性和擴(kuò)展性是非常不利的.
二,MVP
mvp是對(duì)mvc模式的升級(jí),mvp中的model層主要是關(guān)于數(shù)據(jù)的處理,一般進(jìn)行數(shù)據(jù)加載和數(shù)據(jù)存儲(chǔ),而Activity,Fragment變?yōu)関iew層,并且view層和model層所有的交互都是通過(guò)presenter中間代理人層進(jìn)行的.從而使view層和model層進(jìn)行完全解耦.
mvp的簡(jiǎn)單流程:
view層通過(guò)調(diào)用Presenter層接口的方式將業(yè)務(wù)邏輯轉(zhuǎn)交給Presenter層,
然后Presenter層通過(guò)調(diào)用model層的接口得到相應(yīng)的數(shù)據(jù),
最后Presenter層通過(guò)回調(diào)view層接口的方式將數(shù)據(jù)回傳給view層.
這樣view層和model層就完全解耦了,同時(shí)將Activity中業(yè)務(wù)邏輯從view層抽取到Presenter中,使Activity中的邏輯更清晰.
優(yōu)點(diǎn):
將view層和model層完全解耦
將view層的邏輯抽取到Presenter層中,使view層更專(zhuān)一
缺點(diǎn):
當(dāng)項(xiàng)目比較復(fù)雜時(shí),MVP框架能使項(xiàng)目更清晰,簡(jiǎn)化了功能擴(kuò)展的操作,以及更明了的代碼維護(hù).但如果項(xiàng)目邏輯比較簡(jiǎn)單時(shí),就會(huì)使代碼顯的復(fù)雜,有殺雞用牛刀的感覺(jué).
三,MVVM
和MVP的結(jié)構(gòu)非常相似,viewmodel層的主要作用是將model層的數(shù)據(jù)轉(zhuǎn)為view層所需要的格式,在Android中主要是通過(guò)data binding 的形式去實(shí)現(xiàn).
mvvm的簡(jiǎn)單流程:
在MVVM中,View層和Model層進(jìn)行了雙向綁定(即Data Binding),所以Model數(shù)據(jù)的更改會(huì)表現(xiàn)在View上扳缕,反之亦然诵原。ViewModel就是用來(lái)根據(jù)具體情況處理View或Model的變化。
優(yōu)點(diǎn):
擁有MVP的優(yōu)點(diǎn)
缺點(diǎn):
需要熟悉databindig框架,學(xué)習(xí)成本高,但是還是建議大家花時(shí)間研究一下.