對MVC MVP MVVM的理解

2021-09-20 14:56:21 字數 1783 閱讀 4417

最近看了一堆js框架的文件,有點亂,想分門別類整理一下,但是首先需要搞清楚這些框架裡面經常談論的mv*之類的概念。mvc的概念很早就知道,現在發現還有mvp、mvvm,那麼這些設計模式有什麼區別呢?談一下自己的理解。

剛開始理解這些概念的時候認為這幾種模式雖然都是要將view和model解耦,但是非此即彼,沒有關係,乙個應用只會用一種模式。後來慢慢發現世界絕對不是只有黑白兩面,中間最大的一塊其實是灰色地帶,同樣,這幾種模式的邊界並非那麼明顯,可能你在自己的應用中都會用到。實際上也根本沒必要去糾結自己到底用的是mvc、mvp還是mvvp,不管黑貓白貓,捉住老鼠就是好貓。

mvc:model-view-controller

mvp:model-view-presenter

mvvm:model-view-viewmodel

先說一下三者的共同點,也就是model和view

model就是領域模型,資料物件,同時,提供外部對應用程式資料的操作的介面,也可能在資料變化時發出變更通知。model不依賴於view的實現,只要外部程式呼叫model的介面就能夠實現對資料的增刪改查。

view就是ui層,提供對終端使用者的互動操作功能,包括ui展現**及一些相關的介面邏輯**。

三者的差異在於如何粘合view和model,實現使用者的互動操作以及變更通知

controller接收view的操作事件,根據事件不同,或者呼叫model的介面進行資料操作,或者進行view的跳轉,從而也意味著乙個controller可以對應多個view。controller對view的實現不太關心,只會被動地接收,model的資料變更不通過controller直接通知view,通常view採用觀察者模式監聽model的變化。

presenter,與controller一樣,接收view的命令,對model進行操作;與controller不同的是presenter會反作用於view,model的變更通知首先被presenter獲得,然後presenter再去更新view。乙個presenter只對應於乙個view。根據presenter和view對邏輯**分擔的程度不同,這種模式又有兩種情況:passive view和supervisor controller。

viewmodel,注意這裡的「model」指的是view的model,跟上面那個model不是一回事。所謂view的model就是包含view的一些資料屬性和操作的這麼乙個東東,這種模式的關鍵技術就是資料繫結(data binding),view的變化會直接影響viewmodel,viewmodel的變化或者內容也會直接體現在view上。這種模式實際上是框架替應用開發者做了一些工作,開發者只需要較少的**就能實現比較複雜的互動。

mvp和mvvm完全隔離了model和view,但是在有些情況下,資料從model到viewmodel或者presenter的拷貝開銷很大,可能也會結合mvc的方式,model直接通知view進行變更。在實際的應用中很有可能你已經在不知不覺中將幾種模式融合在一起,但是為了**的可擴充套件、可測試性,必須做到模組的解耦,不相關的**不要放在一起。記得幾年前在上一家公司做乙個新產品時,一名外包公司的新員工直接在view中做了資料庫持久化操作,而且乙個hibernate**展開後發現竟然有幾百行的sql語句,搞得我們驚訝不已,一時成為笑談。

個人理解,在廣義地談論mvc架構時,並非指本文中嚴格定義的mvc,而是指的mv*,也就是檢視和模型的分離,只要乙個框架提供了檢視和模型分離的功能,我們就可以認為它是乙個mvc框架。在開發深入之後,可以再體會用到的框架到底是mvc、mvp還是mvvm。

上面如有錯誤,敬請指出,謝謝。

對MVC MVP MVVM的理解

最近看了一堆js框架的文件,有點亂,想分門別類整理一下,但是首先需要搞清楚這些框架裡面經常談論的mv 之類的概念。mvc的概念很早就知道,現在發現還有mvp mvvm,那麼這些設計模式有什麼區別呢?談一下自己的理解。剛開始理解這些概念的時候認為這幾種模式雖然都是要將view和model解耦,但是非此...

MVC MVP MVVM 軟體架構的理解

複雜的軟體必須有清晰合理的架構,否則無法開發和維護。mvc mvp mvvm 就是常見的軟體架構模式,屬於程式設計的方 mvc 是 model view controller 的縮寫 較其他模式的特點 model 和 view 之間存在直接的通訊,而這在其他兩種模式中不存在 優點 缺點 mvp 是 ...

MVC MVP MVVM 三種設計模式的理解

mvc model view controller mvp model view presenter mvvm model view view viewmodel mvc模式 簡介 model view controller mvc模式致力於關注點的切分,這意味著model和controller的邏...