1. 程式人生 > >C#.架構設計(三)MVVM架構模式(用在WPF或Silverlight)、MVC架構模式(用在java開發)、MVP架構模式(用在安卓開發)的原理與區別

C#.架構設計(三)MVVM架構模式(用在WPF或Silverlight)、MVC架構模式(用在java開發)、MVP架構模式(用在安卓開發)的原理與區別

轉發https://blog.csdn.net/victoryzn/article/details/78392128

本文將詳細闡述以下MVC、MVP、MVVM三種理念的定義及區別還有他們的適用場合。

MVC

MVC模式最初生根於伺服器端的Web開發,後來漸漸能夠勝任客戶端Web開發,能夠滿足其複雜性和豐富性。

MVC是Model-View-Controller的縮寫,它將應用程式劃分為三個部分:

Model: 模型(用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法)

View: 檢視(渲染頁面)

Controller: 控制器(M和V之間的聯結器,用於控制應用程式的流程,及頁面的業務邏輯)

MVC特點:

MVC模式的特點在於實現關注點分離,即應用程式中的資料模型與業務和展示邏輯解耦。在客戶端web開發中,就是將模型(M-資料、操作資料)、檢視(V-顯示資料的HTML元素)之間實現程式碼分離,鬆散耦合,使之成為一個更容易開發、維護和測試的客戶端應用程式。

1、View 傳送指令到 Controller ;

2、Controller 完成業務邏輯後,要求 Model 改變狀態 ;

3、Model 將新的資料傳送到 View,使用者得到反饋。

MVC流程:

MVC流程一共有兩種,在日常開發中都會使用到。

一種是通過 View 接受指令,傳遞給 Controller,然後對模型進行修改或者查詢底層資料,最後把改動渲染在檢視上。 


另一種是通過controller接受指令,傳給Controller: 


MVC優點:

1、耦合性低,檢視層和業務層分離,這樣就允許更改檢視層程式碼而不用重新編譯模型和控制器程式碼。
2、重用性高
3、生命週期成本低
4、MVC使開發和維護使用者介面的技術含量降低
5、可維護性高,分離檢視層和業務邏輯層也使得WEB應用更易於維護和修改
6、部署快


MVC缺點:

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

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

3、檢視對模型資料的低效率訪問,依據模型操作介面的不同,檢視可能需要多次呼叫才能獲得足夠的顯示資料。對未變化資料的不必要的頻繁訪問,也將損害操作效能。

MVC應用:

在web app 流行之初, MVC 就應用在了java(struts2)和C#(ASP.NET)服務端應用中,後來在客戶端應用程式中,基於MVC模式,AngularJS應運而生。

MVP

MVP(Model-View-Presenter)是MVC的改良模式,由IBM的子公司Taligent提出。和MVC的相同之處在於:Controller/Presenter負責業務邏輯,Model管理資料,View負責顯示只不過是將 Controller 改名為 Presenter,同時改變了通訊方向。

MVP特點:

1、M、V、P之間雙向通訊。
2、View 與 Model 不通訊,都通過 Presenter 傳遞。Presenter完全把Model和View進行了分離,主要的程式邏輯在Presenter裡實現。
3、View 非常薄,不部署任何業務邏輯,稱為”被動檢視”(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那裡。
4、Presenter與具體的View是沒有直接關聯的,而是通過定義好的介面進行互動,從而使得在變更View時候可以保持Presenter的不變,這樣就可以重用。不僅如此,還可以編寫測試用的View,模擬使用者的各種操作,從而實現對Presenter的測試–從而不需要使用自動化的測試工具。


與MVC區別:

在MVP中,View並不直接使用Model,它們之間的通訊是通過Presenter (MVC中的Controller)來進行的,所有的互動都發生在Presenter內部:

在MVC中,View會直接從Model中讀取資料而不是通過 Controller。

MVP優點:

1、模型與檢視完全分離,我們可以修改檢視而不影響模型;
2、可以更高效地使用模型,因為所有的互動都發生在一個地方——Presenter內部;
3、我們可以將一個Presenter用於多個檢視,而不需要改變Presenter的邏輯。這個特性非常的有用,因為檢視的變化總是比模型的變化頻繁;
4、如果我們把邏輯放在Presenter中,那麼我們就可以脫離使用者介面來測試這些邏輯(單元測試)。


MVP缺點:

檢視和Presenter的互動會過於頻繁,使得他們的聯絡過於緊密。也就是說,一旦檢視變更了,presenter也要變更。

MVP應用: 

可應用與Android開發。

MVVM

MVVM是Model-View-ViewModel的簡寫。微軟的WPF(Windows Presentation Foundation–微軟推出的基於Windows 的使用者介面框架)帶來了新的技術體驗, 使得軟體UI層更加細節化、可定製化。與此同時,在技術層面,WPF也帶來了 諸如Binding(繫結)、Dependency Property(依賴屬性)、Routed Events(路由事件)、Command(命令)、DataTemplate(資料模板)、ControlTemplate(控制模板)等新特性。MVVM模式其實是MV模式與WPF結合的應用方式時發展演變過來的一種新型架構模式。它立足於原有MVP框架並且把WPF的新特性糅合進去,以應對客戶日益複雜的需求變化。

MVVM優點:

MVVM模式和MVC模式類似,主要目的是分離檢視(View)和模型(Model),有幾大優點:

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

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

3、獨立開發,開發人員可以專注於業務邏輯和資料的開發(ViewModel),設計人員可以專注於頁面設計,使用Expression Blend可以很容易設計介面並生成xml程式碼。

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

轉發https://www.cnblogs.com/sunny_z/p/7093663.html

應用場景:

1)針對具有複雜互動邏輯的前端應用

2)提供基礎的架構抽象

3)通過Ajax資料持久化,保證前端使用者體驗

       好處就是當前後端進行一些資料互動的時候,前端可以通過Ajax請求對後端做資料持久化,不需要重新整理整個頁面,只需要改動DOM裡需要改動的那部分資料和內容,特別是對於移動端應用場景,重新整理頁面的代價太昂貴,會重新載入很多資源,雖然有些資源會被快取,但是頁面的DOM、JS、CSS都會被瀏覽器重新解析一遍,因此,移動端頁面經常會做成SPA單頁應用,在這個基礎上就誕生了很多MVVM框架,如Angular、React、Vue