Prism研究(for WPF & Silverlight)
目錄
一. Prism概述
二. Prism評(píng)估
三. Prism文檔導(dǎo)讀
四. 從Hello World開(kāi)始
五. Prism中的術(shù)語(yǔ)和概念
六. Prism中的模式
七. Module
八. View
九. Event
十. Command
十一. Service
十二. Multi-Target
十三. Acceptance Test
十四. 自定義活動(dòng)
十五. RI源碼分析
十六. UI設(shè)計(jì)規(guī)則
十七. 部署和發(fā)布
十八. CodePlex問(wèn)題匯總
一.Prism概述
Prism是Composite Application Guidance for WPF的簡(jiǎn)稱(chēng),,是用于WPF和Silverlight的企業(yè)級(jí)框架,,由微軟P & P(patterns & practices)小組設(shè)計(jì)。
Prism不是橫空出世的,,它的前身是CAB——這是專(zhuān)門(mén)為Winform開(kāi)發(fā)而設(shè)計(jì)的框架,。后來(lái),在2008年6月,,P & P小組推出了Prism的第1個(gè)版本,,專(zhuān)為WPF而設(shè)計(jì)的。而在2009年2月,,則推出了Prism的第2個(gè)版本,,同時(shí)適用于WPF和Silverlight,也就是我這個(gè)系列所要探討的,。
Prism安裝
Prism只是由幾個(gè)dll組成,,對(duì)WPF而言是6個(gè),對(duì)Silverlight而言是5個(gè),。因此使用者不需要額外安裝項(xiàng)目模板到VS2008中,,只要在項(xiàng)目中添加對(duì)它們的引用即可。
以下是使用Prism所需要的相關(guān)資源:
1. 下載Prism框架
下載地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=6DD3D0C1-D5B4-453B-B827-98E162E1BD8D&displaylang=en
這是一個(gè)綠色的包,。所以安裝后,,會(huì)解壓到一個(gè)用戶(hù)指定的目錄(我指定的名字是PRISM,放在桌面上),,截圖如下:
目錄下都是些蝦米東東呢,?
· CAL中是Prism框架的源碼——理解Prism的最重要的參考。
· LIB中是CAL中Prism框架源碼Build生成的dll,,也就是產(chǎn)品。用戶(hù)可以直接把這個(gè)項(xiàng)目下的dll添加引用到自己的項(xiàng)目中,,就能使用Prism框架了,。
· QuickStart,這是一組快速上手的Demo,。從HelloWorld開(kāi)始,,還涉及到Module、View,、Event,、Commond和Multi-Target等5大類(lèi)10多個(gè)小例子。
· RI是一個(gè)成熟的虛擬股票交易程序的源碼,,有WPF和SilverLight兩個(gè)版本,。
· ChartControls是RI所引用到的自定義控件(如餅圖)。
· AcceptanceTestLibrary目錄是Acceptance Test(驗(yàn)收測(cè)試)這個(gè)dll的源碼,。后面我們會(huì)提及什么是Acceptance Test以及如何使用,。
· 所有的bat文件都指向QuickStart,、CAL和RI中的.sln文件,也就是說(shuō),,是打開(kāi)各個(gè)項(xiàng)目的快捷方式,。
2. 下載Prism文檔
在上面的安裝包中其實(shí)就應(yīng)該有這個(gè)文檔了,即:
Composite Application Guidance for WPF and Silverlight - February 2009.chm
如果沒(méi)有,,請(qǐng)到以下地址下載:
http://www./CompositeWPF/Release/ProjectReleases.aspx?ReleaseId=14982
這份305頁(yè)的文檔詳細(xì)地介紹了Prism的一切內(nèi)容,。記住,一定要下載Feb 2009的那個(gè)版本哦,。
注:我的這個(gè)系列文章也是基于這份文檔的,。但是文檔畢竟只是用來(lái)Release給客戶(hù)看的,所以套話廢話很多,,并且有“老王賣(mài)瓜”之嫌,,所以我要寫(xiě)這個(gè)系列,刪繁就簡(jiǎn)是一方面,,同時(shí)還涉及到自己的一些心得,,以及我在工作中的遇到的諸多疑難雜癥。
Prism吹水
Prism的優(yōu)點(diǎn)如下:
· 把界面(Interface)與邏輯相剝離,,從而美工和程序員可以各按其事,,互不干擾。這個(gè)想法有點(diǎn)烏托邦,,因?yàn)閃PF程序員和超女一樣滿(mǎn)大街都是,,但Blend美工在國(guó)內(nèi)鳳毛麟角,不要奢望在你的Team中有這樣的一個(gè)人,。
· 把界面拆分成若干小的模塊(Module),,從而使模塊間的交互實(shí)現(xiàn)了最大的松散耦合,降低了“牽一發(fā)而動(dòng)全身”的風(fēng)險(xiǎn),。此外,,在部署的時(shí)候,也可以實(shí)現(xiàn)按需(OnCommand)加載和更新,,尤其是對(duì)Silverlight而言,,用戶(hù)只有在需要這個(gè)模塊的時(shí)候才會(huì)去下載,而不用長(zhǎng)時(shí)間等待所有的模塊加載完畢,。
· 模塊的拆分,,使得開(kāi)發(fā)和測(cè)試也可以獨(dú)立地進(jìn)行。這是因?yàn)镻rism使用了TDD的設(shè)計(jì)理念,,當(dāng)然我們?cè)陂_(kāi)發(fā)流程中也要follow這樣的思想去編程,,即“開(kāi)發(fā)未動(dòng),測(cè)試先行”,。
· 最大程度的實(shí)現(xiàn)了可復(fù)用(re-use),。尤其是日志關(guān)聯(lián)和權(quán)限管理,,是完全獨(dú)立于主邏輯的(在數(shù)學(xué)上,這叫垂直關(guān)系,,二者的叉積為零,,從而各自改變而互不影響)。
Prism只是一個(gè)框架,,所以它與以下技術(shù)無(wú)關(guān):
· 偶發(fā)連接(SmartClient的特性)
· 通信機(jī)制(這是WCF的職責(zé))
· 應(yīng)用程序性能
· 錯(cuò)誤處理機(jī)制
· 權(quán)限驗(yàn)證(可以使用MemberShip)
· 線程同步
· 版本控制
研究Prism的過(guò)程,,是對(duì)自身技術(shù)修為的一次洗禮。Prism的設(shè)計(jì)理念中充斥著大量的設(shè)計(jì)模式,,因此,,讀起來(lái)有如沐春風(fēng)之感。但是,,真正用起來(lái)就麻煩了,,往往一個(gè)簡(jiǎn)單的邏輯在Prism中就要很復(fù)雜,幾行代碼會(huì)變成幾百行——對(duì)于小型項(xiàng)目而言,,是不適合用這套框架的,。
我們可以從項(xiàng)目一開(kāi)始就使用Prism進(jìn)行開(kāi)發(fā),也可以對(duì)原有老的WPF或Silverlight項(xiàng)目進(jìn)行升級(jí),。我的切身感受是,,升級(jí)并不是很麻煩,只要想清楚這套框架的邏輯,,因此,,改變?cè)O(shè)計(jì)理念是很重要的。
Prism相關(guān)資源:
國(guó)內(nèi)對(duì)Prism的傳經(jīng)授道很早就開(kāi)始了,,比如說(shuō)博客園的周銀輝和張興浩,,他們分別在自己的項(xiàng)目中使用到這個(gè)框架,因此有豐富的心得體會(huì)以及大量的介紹性文章,,博客地址如下:
· 周銀輝:http://www.cnblogs.com/zhouyinhui
· 張興浩:http://www.cnblogs.com/Clingingboy
此外,,P & P 官方論壇也是很不錯(cuò)的地方,上面有來(lái)自全世界的反饋和TroubleShooting,,地址如下:
http://compositewpf./Thread/List.aspx
二.Prism評(píng)估
以下是對(duì)Prism文檔P7-P8的翻譯。
架構(gòu)師和開(kāi)發(fā)者需要花費(fèi)些時(shí)間以完全理解和評(píng)估Prism,。雖然 并不存在一種簡(jiǎn)單的方法對(duì)一個(gè)項(xiàng)目進(jìn)行評(píng)估,,但是這份文檔還是把評(píng)估的過(guò)程劃分為4個(gè)步驟:
1. 適合性分析(Fit Analysis)。判斷Prism是否適合于你的需要,。
2. 初始評(píng)估(Intial evaluation),。安裝、運(yùn)行并檢查Prism,。
3. 深度評(píng)估(In-depth evaluation),。對(duì)Prism進(jìn)行全部的檢查,。
4. 采納(Adoption)。將Prism集成到一個(gè)復(fù)雜的應(yīng)用程序中,。
步驟1:適合性分析
Prism是用來(lái)設(shè)計(jì)復(fù)雜的WPF和Silverlight應(yīng)用程序的,。下面的場(chǎng)景是你在使用Prism時(shí)應(yīng)該考慮的:
你正在創(chuàng)建一個(gè)復(fù)合的應(yīng)用程序,通過(guò)一個(gè)集成的用戶(hù)接口來(lái)表示來(lái)自多個(gè)源的信息,。
你正在開(kāi)發(fā),、測(cè)試并部署相互獨(dú)立的模塊。
你的應(yīng)用程序今后將添加更多的View和函數(shù),。
你必須能夠快速安全地改變應(yīng)用程序,,以滿(mǎn)足企業(yè)級(jí)需要。
你的應(yīng)用程序是由多個(gè)小組合作開(kāi)發(fā)的,。
你的應(yīng)用程序是以WPF和Silverlight為目標(biāo),,并且你想要在這兩個(gè)平臺(tái)間共享盡可能多的代碼。
如果你的應(yīng)用程序并不需要這些場(chǎng)景中的一個(gè)或多個(gè),,那么Prism可能并不適合你,。例如,你的應(yīng)用程序由一些簡(jiǎn)單的界面組成,,或者你正在創(chuàng)建一個(gè)原型或演示應(yīng)用程序,,或者你的開(kāi)發(fā)人員并不熟悉這些觀念或也沒(méi)有實(shí)踐過(guò),并且也沒(méi)有時(shí)間去學(xué)習(xí),,那么Prism對(duì)你而言可能也是不適合的,。
為了判斷Prism是否為一個(gè)有潛力的框架,你需要理解這個(gè)框架所要解決的問(wèn)題,。下面的部分將幫助你執(zhí)行這樣的適合性分析,。
- 什么時(shí)候使用Prism
- 目標(biāo)和優(yōu)點(diǎn)
- 模塊化設(shè)計(jì)概念
- UI Composition設(shè)計(jì)概念
- 適用的人群
應(yīng)該使用1到2個(gè)小時(shí)來(lái)完成這一步驟。
第2步:初始化評(píng)估
為了近距離接觸Prism,,你將要學(xué)習(xí)到更多關(guān)于Prism類(lèi)庫(kù)的設(shè)計(jì),,以決定復(fù)合的應(yīng)用程序框架是如何匹配到你的企業(yè)級(jí)解決方案框架的。你還需要通過(guò)開(kāi)發(fā)一個(gè)簡(jiǎn)單的“Hello World”應(yīng)用程序來(lái)看一下這些代碼,。
需要閱讀如下相關(guān)的主題:
Composite Application Library
Separated Presentation和Dependency Injection模式
容器(Container)設(shè)計(jì)概念
Container,、Services、Event Aggregator和UI Composition
第3步:深度評(píng)估
在決定為你的應(yīng)用程序使用Prism之前,,你可能想要執(zhí)行一次深度評(píng)估,。Prism推薦你評(píng)估QuickStart和Stock Trader RI,并考慮開(kāi)發(fā)一個(gè)基于概念的應(yīng)用程序,,以獲得對(duì)這個(gè)類(lèi)庫(kù)的深度理解,。在這一點(diǎn)上,你還應(yīng)該考慮到對(duì)該類(lèi)庫(kù)所需要的擴(kuò)展和優(yōu)化,,這將幫助你滿(mǎn)足你的企業(yè)級(jí)需求,。
在開(kāi)始你的proof-of-concept應(yīng)用程序之前,,Prism建議你閱讀下面相關(guān)的內(nèi)容:
技術(shù)概念:
Bootstrapper
Module
Shell and View
Commands
Communication
Multi-Targeting
檢查QuickStart
熟悉Stock Trader RI
當(dāng)你開(kāi)發(fā)自己的proof-of-concept應(yīng)用程序時(shí),你應(yīng)該閱讀相關(guān)的How to主題,。
第4步:采納
Prism具有一個(gè)明確的目標(biāo),,就是提供一個(gè)好的使用體驗(yàn)。為了完成這個(gè)目標(biāo),,Prism提供了下面的建議:
你可以使用或不使用Prism類(lèi)庫(kù),。例如,你可以只使用你所需要的服務(wù),。
你可以增長(zhǎng)性地添加Prism類(lèi)庫(kù)到你已有的WPF或Silverlight應(yīng)用程序中,。
你可以創(chuàng)建WPF和Silverlight應(yīng)用程序以共享盡可能多的代碼。
為了使用Prism,,你將要執(zhí)行下面的任務(wù):
決定你將如何使用類(lèi)庫(kù)的:按照原先的樣子,,或者,自定義適合你需要的類(lèi)庫(kù),。
對(duì)在Key Decision中描述的關(guān)鍵決定進(jìn)行決策,,并和Team的其它成員進(jìn)行交流。
培訓(xùn)你的開(kāi)發(fā)Team關(guān)于Prism的技術(shù),。開(kāi)發(fā)者應(yīng)該review下面的主題:以下省略
培訓(xùn)你的設(shè)計(jì)Team關(guān)于Prism的知識(shí),。設(shè)計(jì)者需要review下面的主題:以下省略
三.Prism文檔導(dǎo)讀
話說(shuō),哥哥閱讀這份300頁(yè)的英文文檔僅僅用了11天,,不是顯擺,,是因?yàn)轫?xiàng)目緊,要求盡快上手,,于是夜以繼日地研讀和實(shí)踐,,草草過(guò)了一遍。時(shí)至今日,,我終于發(fā)現(xiàn)設(shè)計(jì)模式的重要性,,很多地方大致看看UML圖就能理解其實(shí)現(xiàn),此外,,如果對(duì)Winform和ASP.NET都有所涉及,,也會(huì)使得學(xué)習(xí)Prism框架輕松很多,最后,,強(qiáng)調(diào)一下千萬(wàn)不要對(duì)WPF和Silverlight厚此薄彼,,雖然二者是不兼容的,但理念是相同的,,同時(shí)掌握不會(huì)耗費(fèi)太多精力,,反而會(huì)使你醍醐灌頂,,甘露灑心,。
言歸正傳,。本文檔目錄如下:
頁(yè)數(shù)
|
主題
|
描述
|
1-12
|
Overview
|
基本都是廢話,有價(jià)值的我都提取出來(lái),,參見(jiàn)我這個(gè)系列的前面兩章,。
|
13-27
|
Design Concepts
|
對(duì)Prism最基本概念的簡(jiǎn)單介紹,算是掃盲了,。建議看完QucikStart章節(jié)再返回來(lái)看一遍這幾頁(yè),,別有一番滋味。
|
28-41
|
Composite Application Library
|
對(duì)Prism框架的初步分析,?;臼窃诖邓2莶葑x過(guò)即可,,沒(méi)必要死摳概念,。
|
42-59
|
Stock Trader Reference Implementation
|
對(duì)Stock Trader RI這個(gè)以Prism為框架的開(kāi)源項(xiàng)目的初步分析,只能算是個(gè)引導(dǎo),,想搞明白還是要自己看源碼,。
|
60-78
|
Patterns in the Composite Application Library
|
Prism中涉及的5個(gè)新模式,Prism的精髓,,一定要仔細(xì)研讀這部分,。
|
79-126
|
Technical Concepts
|
Prism中涉及到的概念的詳細(xì)介紹,非常detail,,看不懂沒(méi)關(guān)系,,因?yàn)橄旅鎯烧戮褪窃谥v如何使用它們的例子。
|
127-148
|
Hands-On Lab
|
一個(gè)HelloWorld的例子,,一步步指導(dǎo)讀者完成,,分為WPF和Silverlight兩個(gè)版本。
|
149-197
|
QuickStarts
|
對(duì)Prism提供的QuickStart目錄中所有例子的分析,,建議結(jié)合Technical Concepts這一章一起看,。
|
198-246
|
Development Activities
|
由若干How to組成,其實(shí)就是Technical Concepts一章的翻版,,內(nèi)容都是重復(fù)的,,不看也罷。
|
247-252
|
Project Linker
|
介紹如何使用Project Linker來(lái)管理Multi-Target項(xiàng)目,,意義不大,,不看也罷。
|
253-261
|
UI Design Guidance Overview
|
Prism下設(shè)計(jì)和編程的隔離準(zhǔn)則,,Mock在Prism中的技巧,,等等。大多泛泛而談,所以我會(huì)在介紹到這里時(shí)補(bǔ)齊所有的例子,。
|
262-280
|
Deploying WPF Applications with ClickOnce
|
使用ClickOnce部署,、發(fā)布、更新WPF的方法,,和Prism主題無(wú)關(guān),,不看也罷。
|
281-282
|
Deploying Silverlight Applications
|
介紹如何部署Silverlight,,和Prism主題無(wú)關(guān),,不看也罷。
|
283-288
|
Customization Activities
|
介紹如何打造自己的活動(dòng),,兩個(gè)例子:如何創(chuàng)建一個(gè)自定義的Region Adapter,;如何使用自定義的日志管理器。
|
289-303
|
Upgrading from Previous Versions
|
介紹Prism版本的變革,,這是給那些使用過(guò)老的Prism的朋友看到,,對(duì)于入門(mén)者,略過(guò)它吧,。
|
304-305
|
Glossary
|
Prism術(shù)語(yǔ)匯總
|
看完我這份清單,,會(huì)發(fā)現(xiàn),其實(shí)精華內(nèi)容也就200頁(yè)不到的樣子,。最后,,是這份文檔的SiteMap,如果你看完了305頁(yè),,可以再回過(guò)頭來(lái)瞅瞅這個(gè)結(jié)構(gòu)圖,,查漏補(bǔ)缺:
未完待續(xù)。,。,。
|