日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

对MVC、MVP、MVVM的理解

發(fā)布時(shí)間:2025/4/5 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对MVC、MVP、MVVM的理解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近看了一堆js框架的文檔,有點(diǎn)亂,想分門別類整理一下,但是首先需要搞清楚這些框架里面經(jīng)常談?wù)摰腗V*之類的概念。MVC的概念很早就知道,現(xiàn)在發(fā)現(xiàn)還有MVP、MVVM,那么這些設(shè)計(jì)模式有什么區(qū)別呢?談一下自己的理解。

剛開始理解這些概念的時(shí)候認(rèn)為這幾種模式雖然都是要將view和model解耦,但是非此即彼,沒有關(guān)系,一個(gè)應(yīng)用只會(huì)用一種模式。后來慢慢發(fā)現(xiàn)世界絕對不是只有黑白兩面,中間最大的一塊其實(shí)是灰色地帶,同樣,這幾種模式的邊界并非那么明顯,可能你在自己的應(yīng)用中都會(huì)用到。實(shí)際上也根本沒必要去糾結(jié)自己到底用的是MVC、MVP還是MVVP,不管黑貓白貓,捉住老鼠就是好貓。


MVC:Model-View-Controller
MVP:Model-View-Presenter
MVVM:Model-View-ViewModel
先說一下三者的共同點(diǎn),也就是Model和View

  • Model就是領(lǐng)域模型,數(shù)據(jù)對象,同時(shí),提供外部對應(yīng)用程序數(shù)據(jù)的操作的接口,也可能在數(shù)據(jù)變化時(shí)發(fā)出變更通知。Model不依賴于View的實(shí)現(xiàn),只要外部程序調(diào)用Model的接口就能夠?qū)崿F(xiàn)對數(shù)據(jù)的增刪改查。

  • View就是UI層,提供對最終用戶的交互操作功能,包括UI展現(xiàn)代碼及一些相關(guān)的界面邏輯代碼。



  • 三者的差異在于如何粘合View和Model,實(shí)現(xiàn)用戶的交互操作以及變更通知


  • Controller接收View的操作事件,根據(jù)事件不同,或者調(diào)用Model的接口進(jìn)行數(shù)據(jù)操作,或者進(jìn)行View的跳轉(zhuǎn),從而也意味著一個(gè)Controller可以對應(yīng)多個(gè)View。Controller對View的實(shí)現(xiàn)不太關(guān)心,只會(huì)被動(dòng)地接收,Model的數(shù)據(jù)變更不通過Controller直接通知View,通常View采用觀察者模式監(jiān)聽Model的變化。

  • Presenter,與Controller一樣,接收View的命令,對Model進(jìn)行操作;與Controller不同的是Presenter會(huì)反作用于View,Model的變更通知首先被Presenter獲得,然后Presenter再去更新View。一個(gè)Presenter只對應(yīng)于一個(gè)View。根據(jù)Presenter和View對邏輯代碼分擔(dān)的程度不同,這種模式又有兩種情況:Passive View和Supervisor Controller。

  • ViewModel,注意這里的“Model”指的是View的Model,跟上面那個(gè)Model不是一回事。所謂View的Model就是包含View的一些數(shù)據(jù)屬性和操作的這么一個(gè)東東,這種模式的關(guān)鍵技術(shù)就是數(shù)據(jù)綁定(data binding),View的變化會(huì)直接影響ViewModel,ViewModel的變化或者內(nèi)容也會(huì)直接體現(xiàn)在View上。這種模式實(shí)際上是框架替應(yīng)用開發(fā)者做了一些工作,開發(fā)者只需要較少的代碼就能實(shí)現(xiàn)比較復(fù)雜的交互。


  • MVP和MVVM完全隔離了Model和View,但是在有些情況下,數(shù)據(jù)從Model到ViewModel或者Presenter的拷貝開銷很大,可能也會(huì)結(jié)合MVC的方式,Model直接通知View進(jìn)行變更。在實(shí)際的應(yīng)用中很有可能你已經(jīng)在不知不覺中將幾種模式融合在一起,但是為了代碼的可擴(kuò)展、可測試性,必須做到模塊的解耦,不相關(guān)的代碼不要放在一起。記得幾年前在上一家公司做一個(gè)新產(chǎn)品時(shí),一名外包公司的新員工直接在View中做了數(shù)據(jù)庫持久化操作,而且一個(gè)hibernate代碼展開后發(fā)現(xiàn)竟然有幾百行的SQL語句,搞得我們驚訝不已,一時(shí)成為笑談。

    個(gè)人理解,在廣義地談?wù)揗VC架構(gòu)時(shí),并非指本文中嚴(yán)格定義的MVC,而是指的MV*,也就是視圖和模型的分離,只要一個(gè)框架提供了視圖和模型分離的功能,我們就可以認(rèn)為它是一個(gè)MVC框架。在開發(fā)深入之后,可以再體會(huì)用到的框架到底是MVC、MVP還是MVVM。

    上面如有錯(cuò)誤,敬請指出,謝謝。











    本文轉(zhuǎn)自 h2appy? 51CTO博客,原文鏈接:http://blog.51cto.com/h2appy/1773812,如需轉(zhuǎn)載請自行聯(lián)系原作者 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的对MVC、MVP、MVVM的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。