MVVM

定義:

Model–View–ViewModel(MVVM) 是一個軟件架構設計模式,由微軟 WPF 和 Silverlight 的架構師 Ken Cooper 和 Ted Peters 開發,是一種簡化用戶界面的事件驅動編程方式。由 John Gossman(同樣也是 WPF 和 Silverlight 的架構師)於2005年在他的博客上發表。

MVVM是Model-View-ViewModel的簡寫。它本質上就是MVC 的改進版。MVVM 就是將其中的View 的狀態和行爲抽象化,讓我們將視圖 UI 和業務邏輯分開。當然這些事 ViewModel 已經幫我們做了,它可以取出 Model 的數據同時幫忙處理 View 中由於需要展示內容而涉及的業務邏輯。微軟的WPF帶來了新的技術體驗,如Silverlight、音頻、視頻、3D、動畫……,這導致了軟件UI層更加細節化、可定製化。同時,在技術層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。它立足於原有MVP框架並且把WPF的新特性糅合進去,以應對客戶日益複雜的需求變化。

原理:

模型(model):Model與MVC模式一樣,Model用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。它具有對數據直接訪問的權利,例如對數據庫的訪問,Model不依賴於View和ViewModel,也就是說,模型不關心會被如何顯示或是如何被操作,模型也不能包含任何用戶使用的與界面相關的邏輯。Model在實際開發中根據實際情況可以進行細分。比如在廣州市城鄉規劃資源平臺就將Model將Service和Reposiroty結合爲WCF服務由ViewModel進行調用。

視圖(view):視圖負責界面和顯示。它通過DataContext(數據上下文)和ViewModel進行數據綁定,不直接與Model交互。 可以綁定Behavior/Comand來調用ViewModel的方法,Command是View到ViewModel的單向通行,通過實現Silverlight提供的IComand接口來實現綁定,讓View觸發事件,ViewModel來處理事件,以解決事件綁定功能。
視圖模型(viewmodel):視圖模型主要包括界面邏輯和模型數據封裝,Behavior/Command事件響應處理,綁定屬性定義和集合等。它是View和Model的橋樑,是對Model的抽象,比如:Model中數據格式是“年月日”,可以在ViewModel中轉換Model的數據爲“日月年”供View顯示。
 

在這裏插入圖片描述

 

優點:

MVVM模式和MVC模式一樣,主要目的是分離視圖(View)和模型(Model),有幾大優點

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

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

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

4. 可測試。界面素來是比較難於測試的,測試可以針對ViewModel來寫。

缺點:

1. 更加大的學習成本。目前這種架構的實現方式比較不完善,常見的就是通過DataBinding來完成。

2. 數據綁定使得調試變得困難。當你看到界面異常,有可能是你View的代碼有Bug,也可能是Model的代碼有問題。數據綁定使得一個位置的Bug被快速傳遞到別的位置,要定位原始出問題的地方就變得不那麼容易了。

3. 數據雙向綁定不利於代碼重用。客戶端開發最常用的重用是View,但是數據雙向綁定技術讓你的一個View都綁定了一個model,不同模塊的model都不同

參考:

前後端分手大師

https://baike.baidu.com/item/MVVM/96310?fr=aladdin

https://www.jianshu.com/p/b319ba07d7ae

https://blog.csdn.net/Calla_Lj/article/details/84571521

發佈了66 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章