一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

WPF 企業(yè)內(nèi)訓(xùn)全程實(shí)錄(中)

  摘要

  WPF企業(yè)內(nèi)訓(xùn)全程實(shí)錄由于文章比較長(zhǎng),所以一共拆分成了三篇,上篇WPF企業(yè)內(nèi)訓(xùn)全程實(shí)錄(上)主要講了基礎(chǔ),這篇作為該實(shí)錄的中篇,起著承上啟下的作用,主要講解開發(fā)模式、團(tuán)隊(duì)協(xié)作及應(yīng)用框架。其實(shí)如果大家仔細(xì)看目錄,可以發(fā)現(xiàn)我安排的順序是首先講解最基本的概念和基礎(chǔ)內(nèi)容、然后過渡到開發(fā)模式及框架、最后結(jié)合其他技術(shù)和項(xiàng)目實(shí)際運(yùn)用,這也是學(xué)習(xí)并應(yīng)用一門技術(shù)最好的流程。上篇實(shí)際上主要有兩個(gè)側(cè)重點(diǎn):一則就是理清脈絡(luò)——歷史淵源、概念引入及基本闡述;二則是講解WPFBasic——主要講解WPF的每個(gè)知識(shí)點(diǎn),涵蓋了WPF的方方面面;如果大家感興趣,可以下載代碼進(jìn)行仔細(xì)研究,如果有不懂的地方也可以參考我寫的WPF 基礎(chǔ)到企業(yè)應(yīng)用系列,這里受篇幅限制,就不詳細(xì)論述。今天的中篇主要圍繞WPF開發(fā)模式、WPF團(tuán)隊(duì)協(xié)作和MVVM框架三個(gè)議題進(jìn)行闡述,希望能給大家?guī)硪恍﹨⒖己蛶椭?/p>

  章節(jié)綱要

· 1.摘要

· 2.本文提綱

· 3.簡(jiǎn)要介紹

· 4.WPF介紹

· 5.WPF基礎(chǔ)

· 6.WPF工具

· 7.WPF開發(fā)模式

· 8.WPF團(tuán)隊(duì)協(xié)作

· 9.了解并使用MVVM框架

· 10.自己開發(fā)MVVM框架

· 11.其他技術(shù)引入

· 12.WPF項(xiàng)目及性能優(yōu)化

· 13.部署與更新

· 14.總結(jié)

· 15.詳細(xì)技術(shù)索引

  七. WPF開發(fā)模式

  提到WPF開發(fā)模式(這里通常所說的是Presentation模式,其他層的模式不在此列),大家可能會(huì)立馬想到MVC/MVP/MVVM模式:

1,MVC:模型-視圖-控制器(Model View Controller)

2,MVP:模型-視圖-表現(xiàn)類(Model-View-Presenter)

3,MVVM:模型-視圖-視圖模型(Model-View-ViewModel)

  的確,時(shí)下流行的就這三種常見的Presentation模式(這三種模式又衍生了很多變種),從根本上說這些模式是為了解決如下的幾個(gè)問題:

1,邏輯與UI緊密耦合,更換UI上的顯示往往需要更改很多邏輯代碼,正所謂“牽一發(fā)而動(dòng)全身”。

2,應(yīng)用程序狀態(tài)的維護(hù),主要包括狀態(tài) (State) , 邏輯 (Logic) ,同步 (Synchronization)耦合太緊。

3,不能使不同的UI共享相同的邏輯(復(fù)用問題)。

4,要測(cè)試用戶界面效果,你需要做復(fù)雜的UI測(cè)試。

5,團(tuán)隊(duì)協(xié)作不能充分發(fā)揮,因?yàn)轳詈咸o的關(guān)系。

6,維護(hù)比較困難,這也是由于耦合緊密且沒有完整的單元測(cè)試。

  之前的C/S(WinForm)和B/S(ASP.NET/ASP.NET MVC)我們已經(jīng)習(xí)慣了MVC和MVP模式,現(xiàn)在針對(duì)WPF和Silverlight的具體特征——它帶來了3D、動(dòng)畫、音頻、視頻……這導(dǎo)致了UI的變化將更加細(xì)節(jié)化和可定制化。同時(shí),在技術(shù)層面上,WPF和 Silverlight也帶來了諸如Binding、 Dependency Property、Routed Events、Command、Attached Behavior(依賴屬性體系間接實(shí)現(xiàn))、DataTemplate、ControlTemplate等新特性。我們?cè)鯓硬拍芰⒆阌谠械募夹g(shù)框架并把WPF/Silverlight的新特性揉合進(jìn)去,以應(yīng)對(duì)客戶日益復(fù)雜且多變的需求呢?那么MVVM模式就是一個(gè)不錯(cuò)的選擇,詳見如下框架圖:

mvvmModel_2

圖1

  在MVVM模式中,你需要一個(gè)為View量身定制的model,那么這個(gè)model實(shí)際上就是上圖ViewModel。ViewModel包含所有UI所需要的接口、屬性和命令,這樣只需要通過Binding使他們進(jìn)行關(guān)聯(lián),就可以使二者之間達(dá)到松散耦合,所以這樣一來,UI就可以由UI專業(yè)人員用Design和Blend來實(shí)現(xiàn)(當(dāng)然很多效果還是需要用傳統(tǒng)的制圖軟件,所以我們都稱這種想法叫理想狀態(tài)),代碼人員也可以專心寫他的邏輯和業(yè)務(wù)代碼,所以這樣分工和協(xié)作變得更輕松、更愉快了。更漂亮的是View完全可以由(Unit/Automatic Test)所取代,所以單元測(cè)試也變得相對(duì)簡(jiǎn)單。這對(duì)于我們的開發(fā)人員和測(cè)試人員無疑是一個(gè)很好的解脫,同時(shí)也提高了系統(tǒng)的可測(cè)性、穩(wěn)定性和維護(hù)性。數(shù)據(jù)綁定系統(tǒng)同時(shí)也提供了標(biāo)準(zhǔn)化的方式傳輸?shù)揭晥D的錯(cuò)誤驗(yàn)證和輸入驗(yàn)證(但是個(gè)人覺得不是很好用,所以我們?cè)趯?shí)際的項(xiàng)目當(dāng)中會(huì)寫一套自己的驗(yàn)證框架)。

講到這里,我們這里不得不引入下面這幅圖,我覺得它能闡述一些比較重要問題:

Figure 1 The Components of an MVVM Application

圖2(注:此圖引用自Robert McCarter的MVVM一文)

  上面的這幅圖表達(dá)了幾個(gè)概念:

1,Domain Model 始終是應(yīng)用程序的核心,必須投入大量精力,按照面向?qū)ο蟮姆治龊驮O(shè)計(jì) (OOAD) 最佳做法進(jìn)行設(shè)計(jì)同時(shí)按照OOP進(jìn)行開發(fā)。

2,Model、View 和 ViewModel 層之間實(shí)施嚴(yán)格的分離,也強(qiáng)調(diào)了它們之間是一種松散耦合的關(guān)系。

3,每一層或者每一個(gè)模塊都有自己完整的單元測(cè)試,這樣即提高了代碼質(zhì)量,同時(shí)也增強(qiáng)了穩(wěn)定性和可維護(hù)性。

4,不要為了MVVM而MVVM,不要強(qiáng)調(diào)UI端不產(chǎn)生一句后臺(tái)代碼而把所有代碼都扔進(jìn)ViewModel,因?yàn)橛械牟僮魅绻粎⑴c邏輯流程,放在UI端處理會(huì)更好,這也符合UI和邏輯隔離的最終原則。

  當(dāng)然使用這個(gè)模式的時(shí)候,我們還要注意很多細(xì)節(jié),這個(gè)是我們必須面對(duì)的,比如我們?cè)趺磳?shí)現(xiàn)View和ViewModel關(guān)聯(lián)、View和ViewModel如何通信、ViewModel與ViewModel如何交互、ViewModel和Model之間的弱關(guān)聯(lián)、怎樣用 Attached Behavior實(shí)現(xiàn)特定命令操作、怎樣彈出UI、怎樣實(shí)現(xiàn)導(dǎo)航、Validation的自定義設(shè)置、異步調(diào)用、延遲加載、性能優(yōu)化、與傳統(tǒng)技術(shù)的交互等等問題。

  八. WPF團(tuán)隊(duì)協(xié)作

  前面我們講了WPF的開發(fā)模式,針對(duì)不同的開發(fā)模式,團(tuán)隊(duì)協(xié)作也會(huì)有一些具體的改變,不管是MVC、MVP還是MVVM,無疑都強(qiáng)調(diào)的是Presentation,所以我們的域模型和底層操作都不會(huì)有所變化,或者嚴(yán)格一點(diǎn)的說是只能影響到服務(wù)層/域模型之上的操作!如果不考慮多系統(tǒng)分布式、ESB及SOA體系,就可以分成以下六種角色:

  1. 專業(yè)美工人員:整個(gè)系統(tǒng)的基調(diào)與樣式、頁面布局圖、頁面效果圖、頁面的樣式與顏色、常用按鈕圖標(biāo)、常用圖標(biāo)圖片等等。

  2. XAML人員:Style,Template,Trigger,Resource用XAML代碼書寫,另外強(qiáng)調(diào)和美工及ViewModel人員的交互與合作。

  3. ViewModel :主要封裝領(lǐng)域模型暴露的接口,然后提供給View,所以這里強(qiáng)調(diào)UI和領(lǐng)域模型的一個(gè)適配作用。

  4. 領(lǐng)域模型(核心):應(yīng)用程序的核心,必須投入大量精力,按照面向?qū)ο蟮姆治龊驮O(shè)計(jì) (OOAD) 最佳做法進(jìn)行設(shè)計(jì)同時(shí)按照OOP進(jìn)行開發(fā)。

  5. 框架+常用功能開發(fā)人員:這里就包括MVVM框架的開發(fā)、維護(hù)以及擴(kuò)展,同時(shí)還包括數(shù)據(jù)底層訪問、日志、異常、常用功能等。

  6. 數(shù)據(jù)庫開發(fā)和管理人員:數(shù)據(jù)庫庫表的建立及維護(hù)、數(shù)據(jù)庫腳本的創(chuàng)建及維護(hù)、數(shù)據(jù)庫優(yōu)化以及日常的數(shù)據(jù)操作問題。

  當(dāng)然在開發(fā)中,這六種角色也并不是完全分離的,可以根據(jù)具體需求進(jìn)行調(diào)整,同時(shí)也可以根據(jù)項(xiàng)目的功能劃分模塊,總之選擇項(xiàng)目最合適的協(xié)作方式就行。

  九. 了解并使用MVVM框架

  1,到底有哪些開源MVVM框架?

  前面介紹了WPF的基本概念和一些相關(guān)知識(shí),我們了解到開發(fā)WPF應(yīng)用程序可以使用現(xiàn)成的框架和模式,最為合適的莫過于時(shí)下正熱的MVVM模式,所以這里我們也列出針對(duì)MVVM模式的已有開源框架:

2010-10-31 22-51-52

圖3

  上面除了WPFToolKit和MEF之外都是一些常用的MVVM框架,連帶自己開發(fā)的一共是八個(gè),所以自己也取了一個(gè)響亮的名字——MVVM八大框架!圣殿騎士本人實(shí)際項(xiàng)目中只用到了三個(gè)框架,之前WPF使用過MVVM Helpers,在Silverlight項(xiàng)目當(dāng)中用過MVVMLight+MEF,后來就一直使用自己開發(fā)的框架,其他框架也研究了很長(zhǎng)時(shí)間,但都是為了開發(fā)MVVM框架借鑒之用。框架雖然眾多,但萬變不離其宗,通用功能如下:

1,Model、View 和 ViewModel之間的關(guān)系:View和ViewModel如何關(guān)聯(lián)起來(IOC)以及如何通信(通常采用Message),ViewModel和Model之間的弱關(guān)聯(lián)(通常采用接口或者簡(jiǎn)單注入)。

2,事件驅(qū)動(dòng)模式在MVVM模式采用Command和Attached Behaviors的形式。

3,屬性及ViewModel的NotifyPropertyChanged處理。

4,提供完整的單元測(cè)試,這也是保證框架的穩(wěn)定性和維護(hù)性的保證。

  也許有一些朋友會(huì)問我為什么要研究這么多框架,其實(shí)做項(xiàng)目只需要認(rèn)真研究并實(shí)踐其中一個(gè)就行,研究它們的原因則主要?dú)w功于自己開發(fā)MVVM框架的需要。下面就讓我們來看一下具體有哪些MVVM的開源框架(具體到每一個(gè)框架后面有時(shí)間再闡述,一篇文章寫得確實(shí)很累):

  2,最強(qiáng)大且功能最多的組合框架——Prism

  下載地址:http://compositewpf.codeplex.com/

  開發(fā)者:微軟patterns & practices團(tuán)隊(duì)

  是否支持Silverlight:是

  學(xué)習(xí)資料:Composite Application Guidance for WPF and Silverlight - May 2010.chm以及Quickstarts和StockTraderRI等。

  源碼截圖如下:

2010-10-6 23-54-02 圖4

  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è)外殼,通過UI元素和Region布局頁面。 它是應(yīng)用程序的頂級(jí)窗口,顯示的內(nèi)容一般就由View來填充,Shell本身并不知道它包含了哪些內(nèi)容,所以功能則是由各個(gè)Module來具體提供。

3,View:它等同于MVP模式、MVVM模式中的View。可以通過IRegionManager注入到Region中。

4,Module:可以把一個(gè)大項(xiàng)目拆分開來,每一個(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)在可以說是組合框架和應(yīng)用框架的統(tǒng)一體,而且是微軟團(tuán)隊(duì)的力量,所以選它是值得保證的。

  3,最強(qiáng)大且功能最多的應(yīng)用框架——Caliburn

  下載地址:http://caliburn.codeplex.com/

  開發(fā)者:Rob Eisenberg

  是否支持Silverlight:是

  學(xué)習(xí)資料:我主要參考項(xiàng)目實(shí)例、源碼、單元測(cè)試用例、國外一些博客和社區(qū)。

  源碼截圖如下:

2010-10-31 22-50-51

圖5

  Caliburn中有幾個(gè)比較重要的概念:

1,在Actions基礎(chǔ)上的Commands帶有很多功能,其中包括多參數(shù)、過濾操作以及異步調(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)目使用還是研究代碼,感覺都受益頗多。

  4,輕量級(jí)且適用的MVVMLight

  下載地址:http://mvvmlight.codeplex.com/

  開發(fā)者:Laurent Bugnion

  是否支持Silverlight:是

  學(xué)習(xí)資料:除了online documentation,我主要參考項(xiàng)目實(shí)例、源碼、單元測(cè)試用例、國外一些博客和社區(qū)。另外這三篇文章非常不錯(cuò),用MVVMLight開發(fā)了一個(gè)比較完整的Silverlight企業(yè)項(xiàng)目

  源碼截圖如下:

2010-10-21 16-22-04

圖6

  MVVMLight中有幾個(gè)比較重要的概念:

1,RelayCommand:通過對(duì)Command進(jìn)行封裝,使得MVVM模式在WPF和Silverlight上更加容易。你只需要在ViewModel中定義好各個(gè)RelayCommand,然后在View中通過Command來綁定ViewModel中定義好的RelayCommand,就可以實(shí)現(xiàn)像WinForm、ASP.NET事件一樣的效果,只不過這里是解除了UI和邏輯的強(qiáng)耦合。

2,Messager:MVVMLight中的Messager作用比較大,前面講了MVVM模式解除了ViewModel和View的強(qiáng)引用,那么它們?nèi)绾蝸磉M(jìn)行交互呢?就是靠它來讓ViewModel和View來進(jìn)行通信的。一般我們會(huì)定義一個(gè)靜態(tài)AppMessages類來作為通用的一個(gè)通信類,原理就是發(fā)布訂閱模式。

3,EventToCommand:這里就比較類似于附加行為的概念,是在MVVM Light Toolkit V3中開始引入的概念。

4,ICleanup接口:當(dāng)顯示某個(gè)View時(shí),需要先調(diào)用Cleanup方法清除數(shù)據(jù),這也是由于ViewModel和View的耦合隔離產(chǎn)生的一些必要操作。

  MVVMLight是一個(gè)非常好用的MVVM框架,提供了VS和Blend的模板及智能感知。它結(jié)合MEF使用真的感覺很輕量級(jí)且高效,而且提供了WPF和Silverlight的支持,尤其在Silverlight的支持上比較好,所以一般選擇輕量級(jí)的Silverlight MVVM模式,它比較被看好。

  5,功能齊備且易用的MVVM Helpers

  下載地址:http://mvvmhelpers.codeplex.com/

  開發(fā)者:Mark Smith

  是否支持Silverlight:否

  學(xué)習(xí)資料:http://www.julmar.com/blog/mark/以及提供的實(shí)例、源碼及測(cè)試用例。

  源碼截圖如下:

2010-10-21 16-25-14

圖7

  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)目中的問題基本都能解決。

  6,功能強(qiáng)大且輕巧的Cinch

  下載地址:http://cinch.codeplex.com/

  開發(fā)者:Sacha Barber

  是否支持Silverlight:否

  學(xué)習(xí)資料:http://sachabarber.NET/以及提供的實(shí)例、源碼及測(cè)試用例。

  1. A walkthrough of Cinch, and its internals - Part I
  2. A walkthrough of Cinch, and its internals - Part II
  3. How to develop ViewModels using Cinch
  4. How to Unit test ViewModels using Cinch app, including how to test Background work threads which may run within Cinch ViewModels
  5. A Demo app using Cinch

  源碼截圖如下:

2010-10-21 16-34-31

圖8

  如果仔細(xì)研究其代碼,你會(huì)發(fā)現(xiàn)它和上面講的MVVM Helpers有很多相似的代碼,估計(jì)是相互參考了一番:-D。Cinch 中有幾個(gè)比較重要的概念:

1,這個(gè)框架在沒有MEF出現(xiàn)之前就已經(jīng)實(shí)現(xiàn)了ViewModel和View之間的強(qiáng)引用隔離,它既沒有一般IOC的配置,也沒有IView來做中轉(zhuǎn),并且窗體和控件的生命周期事件也處理得比較好,所以在這方面來說是非常不錯(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)用程序的搭建,所以也比較受到青睞。

  7,功能簡(jiǎn)單且易擴(kuò)展的MVVMFoundation

  下載地址:http://mvvmfoundation.codeplex.com/

  開發(fā)者:Josh Smith

  是否支持Silverlight:否

  學(xué)習(xí)資料:http://joshsmithonwpf.wordpress.com/以及提供的實(shí)例、源碼及測(cè)試用例。

  源碼截圖如下:

2010-10-21 16-22-57 圖9

  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框架,如果你覺得研究源碼比較困難,就可以先從這個(gè)框架入手,代碼簡(jiǎn)單而且精煉。

  8,附加:支持插件式的依賴注入MEF

  下載地址:http://mef.codeplex.com/

  源碼截圖如下:

2010-10-21 16-20-52 圖10

  9,如何充分利用這些框架

  上面我們已經(jīng)介紹了七大MVVM框架+支持插件式的依賴注入MEF,其實(shí)另外這三個(gè)框架WPF Application Framework (WAF)CalciumCoreMVVM(Basic MVVM framework)也很值得研究,由于時(shí)間和精力的關(guān)系,針對(duì)這三個(gè)框架圣殿騎士也沒有進(jìn)行仔細(xì)的剖析,只是粗略看了一下基本功能。

  其他一些框架諸如OnyxnRouteNito MVVMOceanGoodLight就沒有太多關(guān)注,有興趣的朋友也可以選擇其中某一個(gè)或多個(gè)框架作為研究和學(xué)習(xí),不過還是推薦研究主流的框架,畢竟這些主流框架的開發(fā)團(tuán)隊(duì)和成熟度都比較強(qiáng)。

  上面看到了這么多MVVM框架,那么我們應(yīng)該怎么去學(xué)習(xí)和使用呢?簡(jiǎn)單來說可以歸納為以下幾句話:

1,根據(jù)具體的項(xiàng)目選擇適合的框架,團(tuán)隊(duì)和項(xiàng)目有大有小,所以得根據(jù)這些來選擇具體的框架,其實(shí)終歸來說,幾個(gè)框架功能都比較類似。

2,框架不用研究太多,只要適用于項(xiàng)目就行,尤其是熟練使用并根據(jù)其提供的TDD測(cè)試代碼追溯其原理。

3,框架不是萬能的,對(duì)于某些應(yīng)用和功能可以對(duì)框架擴(kuò)展,這也開源最大的好處之一。

  針對(duì)框架的研究,自己也總結(jié)了幾點(diǎn):

1,首先看框架的相關(guān)介紹,了解相關(guān)的背景、功能、架構(gòu)圖以及其他一些相關(guān)信息——認(rèn)識(shí)了解。

2,根據(jù)介紹查看并調(diào)試框架所提供的實(shí)例——熟悉功能。

3,自己寫一些相關(guān)的項(xiàng)目,主要是熟悉該框架,如果說要急于做項(xiàng)目,后面就可以把框架引入到項(xiàng)目當(dāng)中——具體使用。

4,根據(jù)該框架提供的詳細(xì)單元測(cè)試研究其源碼,這也是我最喜歡研究這些開源框架的原因——原理剖析。

5,通過上面的步驟認(rèn)真分析其原理及細(xì)節(jié)——準(zhǔn)備重現(xiàn)。

6,自己也根據(jù)之前的思路重復(fù)開發(fā)這個(gè)框架,最好能用TDD——框架復(fù)原捷徑。

  上面我們談了一些開源框架相關(guān)知識(shí),下一步我們得自己開發(fā)一個(gè)MVVM框架,一方面是對(duì)知識(shí)的總結(jié),另一方面也是對(duì)知識(shí)的再提煉,同時(shí)也能使自己的認(rèn)識(shí)提升到另一個(gè)高度,緊接下文。

  十. 自己開發(fā)MVVM框架

  由于之前自己做了一套框架,但是還沒有趨于完善,所以暫時(shí)不準(zhǔn)備共享出來(主要是WPF和Silverlight版本更替比較頻繁且沒有加入模板及智能感知)。對(duì)于開發(fā)一套MVVM框架,具體需要做一下幾個(gè)操作:

1,要能解決Model、View和ViewModel之間的強(qiáng)關(guān)聯(lián),這也是核心功能,尤其是View和ViewModel,不管是使用IOC Container還是MEF都行。

2,命令和附加事件的處理,對(duì)Command進(jìn)行封裝,滿足多參數(shù)、方法過濾、泛型、異步回調(diào)等,對(duì)附加事件進(jìn)行封裝,使它像使用命令一樣簡(jiǎn)便。

3,由于View和ViewModel是弱關(guān)聯(lián)或者是無關(guān)聯(lián),如何讓它們進(jìn)行通信?這就需要加入Messenger機(jī)制。

4,前面引入了消息機(jī)制(一般是靜態(tài)化處理),如何來管理、實(shí)例化、清除消息呢?這里得建立一套消息機(jī)制。

5,由于前面采用了弱關(guān)聯(lián)或者無關(guān)聯(lián),并且引入了消息機(jī)制,所以需要對(duì)操作有日志記錄,否則出了問題無法快速定位及追查原因。

6,如何統(tǒng)一管理ObservableObject、PropertyObserver等這些對(duì)象呢?所以得自己建立一套變更體系。

7,對(duì)常用功能及操作進(jìn)行封裝,提供一些常用類庫以及UI Helper等。

  總之,開發(fā)MVVM框架不能求全,只要適合項(xiàng)目就行,也不要想一次就能完善整個(gè)框架,在使用時(shí)不斷根據(jù)需求擴(kuò)展才是明智之舉。另外附加三點(diǎn)開發(fā)MVVM框架心得:

1,充分借鑒其他開源框架,研究各個(gè)框架的不足和優(yōu)勢(shì),然后把思想貫穿于自己的框架中,當(dāng)然有些常用功能代碼也可以直接借鑒過來。

2,對(duì)于這樣一個(gè)比較龐大的框架,使用TDD+反復(fù)重構(gòu)無疑會(huì)提高開發(fā)效率,同時(shí)也能提高框架的可維護(hù)性和穩(wěn)定性,這也是團(tuán)隊(duì)使用的一個(gè)前提。

3,框架會(huì)使用一些常用設(shè)計(jì)模式,有了它們可以讓框架更具有擴(kuò)展性,同時(shí)也減少了開發(fā)成本、增加了可維護(hù)性。比如觀察者模式(消息的發(fā)布、訂閱、觸發(fā))、中介者模式(直接通信的類轉(zhuǎn)化為中間類來處理,隔離耦合)、外觀模式(提供一個(gè)簡(jiǎn)單的接口出來,在內(nèi)部進(jìn)行大量的封裝,這樣就可以起到易用且功能強(qiáng)大的目的)、裝飾模式(原來已經(jīng)穩(wěn)定的功能模塊,如果在不改變?cè)薪Y(jié)構(gòu)的基礎(chǔ)上進(jìn)行擴(kuò)展,無疑這是一個(gè)很好的實(shí)踐)等。

  總結(jié)

  上篇WPF企業(yè)內(nèi)訓(xùn)全程實(shí)錄(上)主要講解歷史淵源、概念引入、基本闡述以及WPF的每個(gè)知識(shí)點(diǎn)。這篇主要主要圍繞WPF開發(fā)模式、WPF團(tuán)隊(duì)協(xié)作和MVVM框架三個(gè)議題進(jìn)行闡述。下篇將著重強(qiáng)調(diào)結(jié)合其他技術(shù)共同打造WPF項(xiàng)目、相關(guān)性能優(yōu)化、以及部署與更新問題,所以敬請(qǐng)期待!另外如果有不懂的地方也可以參考之前寫的WPF 基礎(chǔ)到企業(yè)應(yīng)用系列,最后聲明一下,由于圣殿騎士才識(shí)淺薄,所以以上觀點(diǎn)只是個(gè)人的看法與心得,遺漏和錯(cuò)誤之處也敬請(qǐng)海涵。懷著技術(shù)分享與交流的態(tài)度分享出來,希望各位多多指教!

NET技術(shù)WPF 企業(yè)內(nèi)訓(xùn)全程實(shí)錄(中),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本高清午夜色wwwσ | 亚洲视频色 | 国产第一第二第三第四第五 | 国产精品久久久久久福利 | 色综合激情网 | 香港三级午夜理伦三级99 | 免费popnhub国产在线视频 | 久久亚洲国产成人精品性色 | 情se五月天 | 亚洲第一在线 | 视频91在线| 精品视频在线观看视频免费视频 | 在线视频亚洲 | 精品久久久久久久久久中文字幕 | 精品成人在线 | 91成人免费福利网站在线 | 毛片在线播放视频 | 亚洲欧美性视频 | 久久精品国产一区二区 | 亚洲fuli在线观看 | 久久精品中文字幕久久 | 国产精选在线 | 国产小视频免费 | 97视频在线观看视频在线精品 | bt7086福利一区二区三区最新 | 国产成人啪精品视频免费网 | 丁香婷婷色 | 在线免费精品视频 | 亚洲免费午夜视频 | 国产女乱淫真高清免费视频 | 韩国一级片免费 | 97国产大学生情侣11在线视频 | 久久伊人精品青青草原高清 | 欧美激情一区二区三区在线播放 | 91精品在线播放 | 亚欧美色 | 久久91av | 91人前露出精品国产 | 色哟哟在线视频 | 亚洲一区二区三区高清 | 成人免费观看视频高清视频 |