Android架構(gòu)模式——MVC、MVP、MVVM實(shí)戰(zhàn)
mvc(model-view-controller)
概念解釋?zhuān)?/strong>
MVC是三個(gè)單詞的首字母縮寫(xiě),它們是Model(模型)、View(視圖)和Controller(控制)
- 最上面的一層,是直接面向最終用戶的"視圖層"(View)。它是提供給用戶的操作界面,是程序的外殼。
- 最底下的一層,是核心的"數(shù)據(jù)層"(Model),也就是程序需要操作的數(shù)據(jù)或信息。
- 中間的一層,就是"控制層"(Controller),它負(fù)責(zé)根據(jù)用戶從"視圖層"輸入的指令,選取"數(shù)據(jù)層"中的數(shù)據(jù),然后對(duì)其進(jìn)行相應(yīng)的操作,產(chǎn)生最終結(jié)果。

簡(jiǎn)單理解:用戶操作->View(負(fù)責(zé)接收用戶的輸入操作)->Controller(業(yè)務(wù)邏輯處理)->Model(數(shù)據(jù)持久化)->View(將結(jié)果反饋給View)
聯(lián)系與作用:這三層是緊密聯(lián)系在一起的,但又是互相獨(dú)立的,每一層內(nèi)部的變化不影響其他層。每一層都對(duì)外提供接口(Interface),供上面一層調(diào)用。這樣一來(lái),軟件就可以實(shí)現(xiàn)模塊化,修改外觀或者變更數(shù)據(jù)都不用修改其他層,大大方便了維護(hù)和升級(jí)。
JavaEE中的SSH框架(Struts/Spring/Hibernate),Struts(View, STL)-Spring(Controller, Ioc、Spring MVC)-Hibernate(Model, ORM)以及ASP.NET中的ASP.NET MVC框架,xxx.cshtml-xxxcontroller-xxxmodel。
mvp(model-view-presenter)
MVP是把MVC中的Controller換成了Presenter(呈現(xiàn)),目的就是為了完全切斷View跟Model之間的聯(lián)系,由Presenter充當(dāng)橋梁,做到View-Model之間通信的完全隔離。

.NET程序員熟知的ASP.NET webform、winform基于事件驅(qū)動(dòng)的開(kāi)發(fā)技術(shù)就是使用的MVP模式??丶M成的頁(yè)面充當(dāng)View,實(shí)體數(shù)據(jù)庫(kù)操作充當(dāng)Model,而View和Model之間的控件數(shù)據(jù)綁定操作則屬于Presenter??丶录奶幚砜梢酝ㄟ^(guò)自定義的IView接口實(shí)現(xiàn),而View和IView都將對(duì)Presenter負(fù)責(zé)。
mvvm(model-view-viewModel)
如果說(shuō)MVP是對(duì)MVC的進(jìn)一步改進(jìn),那么MVVM則是思想的完全變革。它是將“數(shù)據(jù)模型數(shù)據(jù)雙向綁定”的思想作為核心,因此在View和Model之間沒(méi)有聯(lián)系,通過(guò)ViewModel進(jìn)行交互,而且Model和ViewModel之間的交互是雙向的,因此視圖的數(shù)據(jù)的變化會(huì)同時(shí)修改數(shù)據(jù)源,而數(shù)據(jù)源數(shù)據(jù)的變化也會(huì)立即反應(yīng)到View上。

MVVM最早由微軟提出來(lái),它借鑒了桌面應(yīng)用程序的MVC思想,在前端頁(yè)面中,把Model用純JavaScript對(duì)象表示,View負(fù)責(zé)顯示,兩者做到了最大限度的分離。
把Model和View關(guān)聯(lián)起來(lái)的就是ViewModel。ViewModel負(fù)責(zé)把Model的數(shù)據(jù)同步到View顯示出來(lái),還負(fù)責(zé)把View的修改同步回Model。
MVVM的設(shè)計(jì)思想:關(guān)注Model的變化,讓MVVM框架去自動(dòng)更新DOM的狀態(tài),從而把開(kāi)發(fā)者從操作DOM的繁瑣步驟中解脫出來(lái)!
這里以前端框架VUE舉例說(shuō)明MVVM,當(dāng)然還有許多有名的框架都用的是MVVM模式;MVVM的好處就是數(shù)據(jù)驅(qū)動(dòng),數(shù)據(jù)變,則頁(yè)面變,這樣就能用簡(jiǎn)單的代碼,實(shí)現(xiàn)比較復(fù)雜的邏輯操作;因此MVVM框架比較適合邏輯復(fù)雜的前端項(xiàng)目,比如一些管理系統(tǒng)等。
結(jié)論:從mvc一直發(fā)展到mvvm,使view/model能夠完全分離,是一個(gè)解耦的過(guò)程,使每個(gè)部分都能更專(zhuān)注于自身的作用,代碼邏輯更清晰,也使開(kāi)發(fā)者的工作更輕松。
最后
給大家分享一個(gè)B站關(guān)于MVC、MVP、MVVM的寶藏視頻Android架構(gòu)模式——MVC、MVP、MVVM實(shí)戰(zhàn)