淺談MVC、MVP、MVVM架構(gòu)模式的區(qū)別和聯(lián)系

MVC、MVP、MVVM這些模式是為了解決開發(fā)過程中的實(shí)際問題而提出來的,目前作為主流的幾種架構(gòu)模式而被廣泛使用。

一、MVC(Model-View-Controller)

MVC是比較直觀的架構(gòu)模式,用戶操作->View(負(fù)責(zé)接收用戶的輸入操作)->Controller(業(yè)務(wù)邏輯處理)->Model(數(shù)據(jù)持久化)->View(將結(jié)果反饋給View)。

MVC使用非常廣泛,比如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。(實(shí)際上后端開發(fā)過程中是v-c-m-c-v,v和m并沒有關(guān)系,下圖僅代表經(jīng)典的mvc模型)

二、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)的開發(fā)技術(shù)就是使用的MVP模式??丶M成的頁面充當(dāng)View,實(shí)體數(shù)據(jù)庫(kù)操作充當(dāng)Model,而View和Model之間的控件數(shù)據(jù)綁定操作則屬于Presenter??丶录奶幚砜梢酝ㄟ^自定義的IView接口實(shí)現(xiàn),而View和IView都將對(duì)Presenter負(fù)責(zé)。


三、MVVM(Model-View-ViewModel)

如果說MVP是對(duì)MVC的進(jìn)一步改進(jìn),那么MVVM則是思想的完全變革。它是將“數(shù)據(jù)模型數(shù)據(jù)雙向綁定”的思想作為核心,因此在View和Model之間沒有聯(lián)系,通過ViewModel進(jìn)行交互,而且Model和ViewModel之間的交互是雙向的,因此視圖的數(shù)據(jù)的變化會(huì)同時(shí)修改數(shù)據(jù)源,而數(shù)據(jù)源數(shù)據(jù)的變化也會(huì)立即反應(yīng)到View上。

這方面典型的應(yīng)用有.NET的WPF,js框架Knockout、AngularJS等。

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 解決ubuntu下中文插入亂碼問題 下列兩種方法 1 僅修改一個(gè)表的 在建表完成后用以下命令 2 永久解決 打開m...
    iGroove閱讀 218評(píng)論 0 2
  • 注冊(cè)達(dá)令家是認(rèn)真研究后的決定,我是個(gè)很挑剔的人,挑剔貨源、挑剔品質(zhì)、挑剔服務(wù)、挑剔平臺(tái)是否有足夠強(qiáng)大的背景支撐! ...
    Mia_米陽閱讀 336評(píng)論 0 0
  • 文/枯木棉 寒冬已過,初春將至。什么都逃不過歲月,沒有時(shí)間記錄下容顏再循環(huán)播放,就如2017年的冬日不會(huì)再有下一次...
    枯木棉閱讀 434評(píng)論 1 2
  • 第15期第5篇 《我們終將遇上愛與孤獨(dú)》,這是最近張德芬出版的新書。在新書簽售發(fā)布會(huì)上,德芬老師的表達(dá),讓我深受啟...
    蘭若echo閱讀 459評(píng)論 0 3

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