【日常交流】淺析MVC、MVP和MVVM

MVC 

        MVC是最常見的組織架構,由View(視圖),Controller(控制器)和Model(模型)組成

        View(視圖):負責視圖展示,將Model中的數據可視化出來。

        Controller(控制器):負責業務邏輯,根據用戶行爲對Model數據進行修改。

        Model(模型):負責保存應用數據,與後端數據進行同步。

                                      

通信方式如下:

        1)View傳送指定到Controller(控制器)

        2)Controller(控制器)會執行一段業務邏輯,在執行結束之後,會發送一段指令改變Model的狀態

        3)隨後Model將狀態數據信息返回給View,用戶得到反饋信息

        各個通信之間都是單向的。

        但是在實際開發過程當中,往往會出現以下情況:

                                                         

通信方式:

      1)用戶可以向 View 發送指令(DOM 事件),再由 View 直接要求 Model 改變狀態。

      2)用戶也可以直接向 Controller 發送指令(改變 URL 觸發 hashChange 事件),再由 Controller 發送給 View。

      3)Controller 非常薄,只起到路由的作用,而 View 非常厚,業務邏輯都部署在 View。所以,Backbone 索性取消了 Controller,只保留一個 Router(路由器) 。

         這種情況下往往會出現,當更新了Model數據的時候,不知道是View觸發還是Controller觸發更改的數據,很容易造成數據的混雜。

                       

        並且View比較龐大,而Controller比較單薄:如果在VIew中調用數據的話,會造成View的內容越來越多,而相應的Controller的內容變得越來越少了。

MVC的優缺點:

優點:

    1)耦合性低,視圖層和業務層分離,允許更改視圖層代碼而不用重新編譯模型和控制器的代碼

    2)重用性高

    3)生命週期成本低

    4)MVC便於開發和維護用戶接口的技術含量低

    5)可維護性高,分離視圖層和業務邏輯層使得WEB應用更易於維護和修改

    6)部署快

缺點:

    1)View 和 Model 之間是直接進行交互的,也就是說 View 和 Model 之間是可以相互產生影響的,這樣在代碼中就必然會導致 View 和 Model 之間的耦合

    2)不適合小型,中等規模的應用程序,花費大量時間將 MVC 應用到規模並不是很大的應用程序通常會得不償失。

    3)視圖與控制器間過於緊密連接,視圖與控制器是相互分離,但卻是聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。

    4)視圖對模型數據的低效率訪問,依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。

MVP

        MVP和MVC很接近,在MVP模式中,P(Presenter)相當於是一箇中間人,用於相互的傳遞,它負責View和Model之間的數據流動,從而防止View和Model之間的直接交流。

                                             

        presenter負責和Model進行雙向交互,並且與View也進行雙向交互。相對於MVC來說,View變成了被動視圖,相應的由於只和presenter進行交互,從而自身變得很小。但是相反的,由於presenter和Model以及View之間進行了相互的交互,使得presenter自身在應用逐漸變大的同事,導致presenter自身體積增大,難以維護。

MVP的優缺點:

優點:

        1)模型與視圖完全分離,可修改視圖而不影響模型

        2)可以更高效的利用模型,因爲所有的交互都在Presonter內部

        3)我們可以將一個Presenter用於多個視圖,而不需要改變Presenter的邏輯。這個特性非常的有用,因爲視圖的變化總是比模型的變化頻繁;

         4)如果我們把邏輯放在Presenter中,那麼我們就可以脫離用戶接口來測試這些邏輯(單元測試)。

         5)使得整個軟件分層清晰,降低耦合度

缺點:

        1)視圖和Presenter的交互會過於頻繁,使他們的聯繫過於緊密,一旦視圖變更,Presenter也要進行變更

        2)需要加入Presenter作爲橋樑協調View和Model,導致Presenter會變得很臃腫

MVVM

        MVVM可以分解成(Model-View-ViewModel).ViewModel可以理解爲在presenter基礎上的進階版。

        

        其模型和MVC差不多,只不過MVVM採用的是雙向綁定,當View發生變動的時候,會自動反應在ViewModel中,反之亦然。

MVVM的優缺點:

優點:

       1)低耦合,視圖(View)可以獨立於Model變化和修改,一個ViewModel可以綁定到不同的”View”上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。

       2)可重用性,可以把一些視圖邏輯放在一個ViewModel裏面,讓很多view重用這段視圖邏輯。

       3)獨立開發,開發人員可以專注於業務邏輯和數據的開發(ViewModel),設計人員可以專注於頁面設計,使用Expression Blend可以很容易設計界面並生成xml代碼。

       4)可測試,界面向來是比較難於測試的,而現在測試可以針對ViewModel來寫。

缺點:

        此架構方式的實現方式比較不完善。

MVC、MVP和MVVM小結

        1)這三種框架模式設計的目標都是爲了解決Model和View的耦合問題

        2)MVC模式較早應用在後端,如Spring MVC,ASP.NET MVC等,在前端領域,如Backbone。js也有應用,其優點是分層清晰,缺點是數據混亂,靈活性帶來的維護性問題

        3)MVP模式是MVC的進化模式,Presenter作爲中間層負責MV通信,解決了兩者耦合問題,但P層過於臃腫會導致維護問題

        4)MVVM模式在前端領域有廣泛應用,它不僅解決了MV耦合問題,還同時解決了維護兩者映射關係的大量範澤代碼和DOM操作代碼,在提高開發效率、可讀性同時還保持了優越的性能表現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章