mvvm框架有:1、MVVMLight框架,一個(gè)實(shí)現(xiàn)MVVM模式的輕量級(jí)框架;2、Prism框架;3、Caliburn框架,一個(gè)MVVM類的開(kāi)源框架;4、MVVM Helpers框架;5、Cinch框架;6、MVVMFoundation框架
實(shí)現(xiàn)MVVM的框架
1、最強(qiáng)大且功能最多的組合框架——Prism
下載地址:http://compositewpf.codeplex.com/
開(kāi)發(fā)者:微軟patterns & practices團(tuán)隊(duì)
是否支持Silverlight:是
學(xué)習(xí)資料:Composite Application Guidance for WPF and Silverlight – May 2010.chm以及Quickstarts和StockTraderRI等。
源碼截圖如下:
Prism——之前又叫Composite Application Guidance for WPF and Silverlight,它是構(gòu)建復(fù)雜的基于WPF/Silverlight企業(yè)級(jí)應(yīng)用的主流框架。Prism中有幾個(gè)比較重要的概念:
1,BootStrapper:應(yīng)用程序切入點(diǎn),繼承Prism的UnityContainer或MEF提供的MefUnityContainer,為系統(tǒng)提供一個(gè)容器。
2,Shell:它是一個(gè)外殼,通過(guò)UI元素和Region布局頁(yè)面。 它是應(yīng)用程序的頂級(jí)窗口,顯示的內(nèi)容一般就由View來(lái)填充,Shell本身并不知道它包含了哪些內(nèi)容,所以功能則是由各個(gè)Module來(lái)具體提供。
3,View:它等同于MVP模式、MVVM模式中的View??梢酝ㄟ^(guò)IRegionManager注入到Region中。
4,Module:可以把一個(gè)大項(xiàng)目拆分開(kāi)來(lái),每一個(gè)Module都包含View、數(shù)據(jù)、模型,主要用于實(shí)現(xiàn)復(fù)雜業(yè)務(wù)操作。
5,IModuleManager:主要用于管理模塊加載,可以實(shí)現(xiàn)動(dòng)態(tài)加載。
6,IEventAggregator:事件處理接口,實(shí)現(xiàn)訂閱和發(fā)布模式,這也是MVVM框架的一般做法。
Prism是一個(gè)比較龐大的組合框架,4.0引入MEF及功能調(diào)整以后變得更加強(qiáng)大了,現(xiàn)在可以說(shuō)是組合框架和應(yīng)用框架的統(tǒng)一體,而且是微軟團(tuán)隊(duì)的力量,所以選它是值得保證的。
2、最強(qiáng)大且功能最多的應(yīng)用框架——Caliburn
下載地址:http://caliburn.codeplex.com/
開(kāi)發(fā)者:Rob Eisenberg
是否支持Silverlight:是
學(xué)習(xí)資料:我主要參考項(xiàng)目實(shí)例、源碼、單元測(cè)試用例、國(guó)外一些博客和社區(qū)。
源碼截圖如下:
Caliburn中有幾個(gè)比較重要的概念:
1,在Actions基礎(chǔ)上的Commands帶有很多功能,其中包括多參數(shù)、過(guò)濾操作以及異步調(diào)用。
2,窗體和控件的生命周期事件也處理得比較好(包括activation、deactivation、shutdown等)。
3,不管是整個(gè)框架還是基于這個(gè)框架的應(yīng)用程序的可測(cè)性都比較好。
4,提供了很多常用功能,這些在項(xiàng)目當(dāng)中都比較有用。
5,除了支持MVVM模式之外,還很好的支持MVP模式以及其他的一些變種模式。
6,強(qiáng)大的依賴注入框架以及AOP框架,這里可以靈活選用其中一種。
Caliburn是一個(gè)非常強(qiáng)大的MVVM應(yīng)用框架,對(duì)很多功能都提供了靈活且多種實(shí)現(xiàn),不論是項(xiàng)目使用還是研究代碼,感覺(jué)都受益頗多。
3、輕量級(jí)且適用的MVVMLight
MVVMLight是一個(gè)實(shí)現(xiàn)MVVM模式的輕量級(jí)框架(相對(duì)于Prism),能夠更好的幫助我們開(kāi)發(fā)WPF 、Windows Phone、Windows 8、SilverLight相關(guān)項(xiàng)目。
MVVMLight的作者Laurent Bugnion 是個(gè)微軟MVP,作者將代碼開(kāi)源到Codeplex上面:http://mvvmlight.codeplex.com/。
MVVMLight的官網(wǎng):http://www.mvvmlight.net/,上面有詳細(xì)的介紹和視頻文檔,有興趣可以了解下。
下載地址:http://mvvmlight.codeplex.com/
開(kāi)發(fā)者:Laurent Bugnion
是否支持Silverlight:是
學(xué)習(xí)資料:除了online documentation,我主要參考項(xiàng)目實(shí)例、源碼、單元測(cè)試用例、國(guó)外一些博客和社區(qū)。另外這三篇文章非常不錯(cuò),用MVVMLight開(kāi)發(fā)了一個(gè)比較完整的Silverlight企業(yè)項(xiàng)目
-
Part 1 – Introduction, Installation, and General Application Design Topics
-
Part 2 – MVVM Light Topics
-
Part 3 – Custom Authentication, Reset Password and User Maintenance
源碼截圖如下:
MVVMLight中有幾個(gè)比較重要的概念:
1,RelayCommand:通過(guò)對(duì)Command進(jìn)行封裝,使得MVVM模式在WPF和Silverlight上更加容易。你只需要在 ViewModel中定義好各個(gè)RelayCommand,然后在View中通過(guò)Command來(lái)綁定ViewModel中定義好的 RelayCommand,就可以實(shí)現(xiàn)像WinForm、ASP.NET事件一樣的效果,只不過(guò)這里是解除了UI和邏輯的強(qiáng)耦合。
2,Messager:MVVMLight中的Messager作用比較大,前面講了MVVM模式解除了ViewModel和View的強(qiáng)引用,那么它們?nèi)绾蝸?lái)進(jìn)行交互呢?就是靠它來(lái)讓ViewModel和View來(lái)進(jìn)行通信的。一般我們會(huì)定義一個(gè)靜態(tài)AppMessages類來(lái)作為通用的一個(gè)通信類,原理就是發(fā)布訂閱模式。
3,EventToCommand:這里就比較類似于附加行為的概念,是在MVVM Light Toolkit V3中開(kāi)始引入的概念。
4,ICleanup接口:當(dāng)顯示某個(gè)View時(shí),需要先調(diào)用Cleanup方法清除數(shù)據(jù),這也是由于ViewModel和View的耦合隔離產(chǎn)生的一些必要操作。
MVVMLight是一個(gè)非常好用的MVVM框架,提供了VS和Blend的模板及智能感知。它結(jié)合MEF使用真的感覺(jué)很輕量級(jí)且高效,而且提供了WPF和Silverlight的支持,尤其在Silverlight的支持上比較好,所以一般選擇輕量級(jí)的Silverlight MVVM模式,它比較被看好。
4、功能齊備且易用的MVVM Helpers
下載地址:http://mvvmhelpers.codeplex.com/
開(kāi)發(fā)者:Mark Smith
是否支持Silverlight:否
學(xué)習(xí)資料:http://www.julmar.com/blog/mark/以及提供的實(shí)例、源碼及測(cè)試用例。
源碼截圖如下:
MVVM Helpers又叫JulMar MVVM Helpers + Behaviors,其中有幾個(gè)比較重要的概念:
1、提供了MVVM模式的基本功能,包括ViewModel、View及Model之間的隔離,另外還提供了一些常用功能。
2、ViewModel的創(chuàng)建使用標(biāo)簽的形式注入,現(xiàn)在也可以引入MEF。
3、IOC/DI的支持,屬性都有驗(yàn)證機(jī)制,Wait Cursor的支持,當(dāng)使用完viewmodel之后能及時(shí)釋放,這樣避免內(nèi)存泄露。
4、提供了常用的Attached Behaviors支持。
5、消息機(jī)制的引入,避免強(qiáng)引用產(chǎn)生的耦合。
MVVM Helpers是一個(gè)非常適用的MVVM框架,尤其是提供了MVVM常用功能+MEF+Attached Behaviors,所以項(xiàng)目中的問(wèn)題基本都能解決。
5,功能強(qiáng)大且輕巧的Cinch
下載地址:http://cinch.codeplex.com/
開(kāi)發(fā)者:Sacha Barber
是否支持Silverlight:否
學(xué)習(xí)資料:http://sachabarber.net/以及提供的實(shí)例、源碼及測(cè)試用例。
源碼截圖如下:
如果仔細(xì)研究其代碼,你會(huì)發(fā)現(xiàn)它和上面講的MVVM Helpers有很多相似的代碼,估計(jì)是相互參考了一番:-D。Cinch 中有幾個(gè)比較重要的概念:
1,這個(gè)框架在沒(méi)有MEF出現(xiàn)之前就已經(jīng)實(shí)現(xiàn)了ViewModel和View之間的強(qiáng)引用隔離,它既沒(méi)有一般IOC的配置,也沒(méi)有IView來(lái)做中轉(zhuǎn),并且窗體和控件的生命周期事件也處理得比較好,所以在這方面來(lái)說(shuō)是非常不錯(cuò)的。
2,提供了常用的Attached Behaviors支持,另外也提供了一些MVVM常用功能。
3,DI/IOC使用Unity實(shí)現(xiàn),多線程的實(shí)現(xiàn),避免系統(tǒng)出現(xiàn)不可預(yù)料的錯(cuò)誤。
4,當(dāng)使用完viewmodel之后能及時(shí)釋放,這樣避免內(nèi)存泄露,驗(yàn)證機(jī)制的加入,常用導(dǎo)航實(shí)現(xiàn)。
5,消息機(jī)制的引入,避免強(qiáng)引用產(chǎn)生的耦合。
Cinch 是一個(gè)非常強(qiáng)大的框架,尤其是它比較著眼整個(gè)應(yīng)用程序的搭建,所以也比較受到青睞。
6、功能簡(jiǎn)單且易擴(kuò)展的MVVMFoundation
下載地址:http://mvvmfoundation.codeplex.com/
開(kāi)發(fā)者:Josh Smith
是否支持Silverlight:否
學(xué)習(xí)資料:http://joshsmithonwpf.wordpress.com/以及提供的實(shí)例、源碼及測(cè)試用例。
源碼截圖如下:
MVVMFoundation中有幾個(gè)比較重要的概念:
1,Messenger:這里主要用在各種不同的ViewModel之間通信(比如相互關(guān)聯(lián)的ViewModel、主從ViewModel等),當(dāng)然也可以擴(kuò)展成ViewModel與View之間進(jìn)行通信。
2,ObservableObject:這里相當(dāng)于ViewModelBase的概念,每一個(gè)ViewModel繼承自該類,調(diào)用完成之后立即釋放,防止內(nèi)存泄露。
3,PropertyObserver:主要是對(duì)INotifyPropertyChanged.PropertyChanged進(jìn)行封裝,這樣封裝可以精簡(jiǎn)代碼,同時(shí)可以防止不當(dāng)操作引起的內(nèi)存泄露。
4,RelayCommand接口:封裝command的聲明,包括execution執(zhí)行邏輯,可選的can-execute邏輯等。外部只需要實(shí)例化并Binding就可以簡(jiǎn)單使用。
MVVMFoundation是一個(gè)非常簡(jiǎn)單的MVVM框架,如果你覺(jué)得研究源碼比較困難,就可以先從這個(gè)框架入手,代碼簡(jiǎn)單而且精煉。