Mvvm簡介
當我們在開發WPF,SilverLight,WP程序時,會使用Mvvm這一架構模式。它是一個很籠統的架構模式概念。在.Net下,我所知道的Mvvm框架有
其中MvvmLight是三者中最簡單,但也是最完美詮釋Mvvm架構模式的框架。Caliburn.Micro和Prism除了提供基本的Mvvm架構模式之外,提供了其他更加豐富的功能,有興趣的同學可以前往研究。
本文主要從MvvmLight入手。
Mvvm是Model-View-ViewModel的縮寫。這個模式中的核心就是View,ViewModel,Model三者之間的組織和聯系。
- View
即視圖,WPF中以Window,UserControl,Page作為視圖.
- ViewModel
視圖邏輯,業務邏輯,例如用戶在界面上點擊一個按鈕,那么這個按鈕具體做什么事情,就是在這里實現,注意,並不是在視圖的
后台代碼中(.xaml.cs)中來實現.
- Model
數據模型,實體模型,例如一個表示學生的類
他們之間的關系用一個圖可以表示出來
;
這是普通的一個Mvvm運用,總結一下就是:
1.View需要顯示的數據來自於ViewModel對Model的組織,WPF中的數據綁定機制會將數據更新到View上
2.View通過Command調用ViewModel中的方法對Model進行操作,完成業務
這樣的架構有什么好處?
Mvvm根本的思想就是界面和業務功能進行分離,View的職責就是負責如何顯示數據及發送命令,ViewModel的功能就是如何提供數據和執行命令。各司其職,互不影響。假如客戶覺得這個
界面不好看,那么我們僅僅是對View作修改,不會影響到ViewModel中的功能代碼,減少了犯錯的機會。隨着功能地增加,系統越來越復雜,相應地程序中會增加View和ViewModel文件,將
復雜的界面分離成局部的View,局部的View對應局部的ViewModel,功能點散落在各個ViewModel中,每個ViewModel只專注自己職能之內的事情。ViewModel包含了View要顯示的數據,並且
知道View的交互代碼,所以ViewModel就像一個無形的View。
一直以來針對View的自動化測試總是顯得很困難,那么測試ViewModel就會非常方便。總結一下,使用Mvvm架構具有以下優勢
- 易維護
- 靈活擴展
- 易測試
兩個理念
在Mvvm中有兩種理念。
- View優先(MvvmLight)
- ViewModel優先(Caliburn.Micro)
使用兩種理念寫出來的代碼是不一樣的,所以團隊開發中使用其一即可。區分二者最直接的表現就在於如何顯示一個View
-
在MvvmLight中
var view=new AppView();
view.Show();
-
在Caliburn.Micro中
var viewModel=new AppViewModel();
WindowManager.Show(viewModel);
在MvvmLight中,先創建一個View對象,然后在與之對應的ViewModel綁定,而在CM中,有個名為WindowManager的類會幫我們
去找到與ViewModel對應的View。后面我也會花時間整理一個CM的總結。
下一篇會針對MvvmLight進一步分析,主要是一些示例代碼,它是一個很簡單的框架,快速學會使用它
用好它,能夠擴展的地方會詳細一點.