探秘Model-View-ViewModel設(shè)計模式
Model-View-ViewModel和MVC、MVP設(shè)計模式的不同點
Model-View-ViewModel設(shè)計模式是MVP設(shè)計模式與WPF技術(shù)相結(jié)合的產(chǎn)物,對于一些很常見的如Model-View-Controller(MVC)設(shè)計模式和Model-View-Presenter(MVP)設(shè)計模式來說,當(dāng)在WPF下使用時它們都有一個很大的缺點:就是它們根本沒有考慮到WPF強大的數(shù)據(jù)綁定技術(shù)。在這些模式中,Controller或者Presenter對視圖的行為負(fù)責(zé),就像填充TextBox的文本內(nèi)容,加載ListBox,填充表格的內(nèi)容等等。而這些在WPF中都能輕松解決,因為正好WPF最大的優(yōu)點之一就是它豐富的數(shù)據(jù)綁定能力。如果在WPF中使用MVC或者MVP設(shè)計模式,就可能完全無法利用WPF中數(shù)據(jù)綁定的方便性,而Model-View-ViewModel則不一樣。
Model-View-ViewModel的定義
Model-View-ViewModel設(shè)計模式最早是由John Gossman引入的,感興趣的朋友可以看看“http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx”這篇文章。該模型提供了一個純凈的Model,創(chuàng)建了一個抽象的視圖來容納狀態(tài),并且數(shù)據(jù)從一個由可視化設(shè)計器創(chuàng)建的視圖綁定到一個抽象的視圖上。該可視化設(shè)計器主要是Microsoft Expression Blend工具,而這個抽象的視圖則是ViewModel。關(guān)鍵的地方是通過數(shù)據(jù)綁定在View與ViewModel模型之間進行雙向的聯(lián)系。當(dāng)正確地使用該設(shè)計模式后,每一個View除了純凈的XAML和非常少量的后置代碼外不會再包含任何東西,徹底地做到了界面展示和業(yè)務(wù)邏輯的分離,讓程序員更加專注于代碼的編寫。
ViewModel
ViewModel的作用是讓Mdoel更加適合于View。例如你有一個返回了一個泛型集合IList
因為WPF內(nèi)置了Command模式,對于像Button控件之類的UI元素來說都有一個Command的屬性,它是WPF所定義的ICommand類型??梢园堰@些命令放到ViewModel中并以公有屬性的形式暴露出來,這樣就可以讓View對其進行綁定。這極其強大,因為它可以把ModelView中的可執(zhí)行代碼綁定到窗體的Button上。
Demo
以下是使用了Model-View-ViewModel 設(shè)計模式的一個簡單的WPF應(yīng)用程序例子,感興趣的話可以下載代碼看看。后臺使用的是大家常見的Northwnd數(shù)據(jù)庫:
相關(guān)的類關(guān)系圖如下:
原文標(biāo)題:Model-View-ViewModel 設(shè)計模式介紹
鏈接:http://www.cnblogs.com/gyche/archive/2009/09/21/1557307.html
【編輯推薦】