淺談MVC、MVP、MVVM架構(gòu)模式

Android架構(gòu)模式——MVC、MVP、MVVM實(shí)戰(zhàn)

mvc(model-view-controller)

概念解釋?zhuān)?/strong>

MVC是三個(gè)單詞的首字母縮寫(xiě),它們是Model(模型)、View(視圖)和Controller(控制)

  1. 最上面的一層,是直接面向最終用戶的"視圖層"(View)。它是提供給用戶的操作界面,是程序的外殼。
  2. 最底下的一層,是核心的"數(shù)據(jù)層"(Model),也就是程序需要操作的數(shù)據(jù)或信息。
  3. 中間的一層,就是"控制層"(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)

?著作權(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)容