Prism - 基本介紹

08 March 2012 — Written by Sky Chang
#Design Patten#Silveright#TDD#Tools#WPF

最近因為公司需要架構Silverlight、WPF等相關案子,所以被迫從網頁程式設計師轉職為視窗程式設計師( 名稱隨意啦XDD ),不過既然都是.net的技術,也沒有理由說不,所以還是摸摸鼻子,表面上很開心地跳下去學QQ;而基本的語法在邊做邊錯的學習下,也慢慢地了解,既然了解了基本的功能,接下來,就是要探討整個架構了;而在Silverlight或是WPF上,最常用到架構就是MVVM ( 這裡有幾篇小弟的拙作 ),當然,除了自己打造MVVM的架構外,也有一些很有名的MVVM框架,例如MVVM Light Toolkit;但如果今天遇到比較複雜的應用程式,如下圖,就還是很容造成一些繫節太深。

image

而這次由微軟團隊負責開發的Prism,是負責來解決這個問題的一個框架;講到這邊,或許有人會提問,那他優於MVVM嚕!?答案是錯的,他是比MVVM更上層,它的目的是把每個區塊變成一個一個的模組,讓各個模組之間互相獨立,讓每個模組可以是一個獨立的專案 ( 沒錯,在VS裡面,每個模組就是一個獨立專案 ),就如上圖一樣,他可以切割成很多的專案,然後命令底下的工人分發給志同道合的朋友開發,所以其實每個模組是可以再套用MVVM的架構的。

好處

就如同前面說的,既然一個一個模組拆出來,那最大的好處就是可以重複使用於不同的地方,如下圖。

image

原理

其實這個框架主要的原理是應用到IoC,也就是控制反轉的概念,目前小弟我還沒針對這個概念寫一篇文章,但Google上面有許多的資料,IOC講最簡單最簡單,就是利用Interface去做抽換 ( 當然,實際比較複雜 ),但這邊,如果不懂的人,可以先想成,就是利用介面去抽換一些東西 ( 例如:抽換View、控制器等等 )。

另外Prism其實是一個大架構,而要實作 IoC的地方,Prism其實提供了兩個方案Unity和MEF。

當然,這兩個都是微軟自己提供的Framework,其中Unity據說已經沒再更新了=w=,而目前主要是以MEF為主,而MEF全名為Managed Extensibility Framework,重點是,這個東西,其實是包含在.NET Framework 4裡面的 ( 老實說,完全沒注意到- - ),有興趣可以參考Lolota前輩的文章內容淺顯易懂,未來如果有機會,小弟再寫一篇相關的文章吧。

既然提到MEF,在文章出來前,就稍微提一下,你可以想像的很簡單,就是把東西丟到一個組合器裡面,他會依據你丟進去的東西,自動幫你組合成你要的結果。

所以說到這邊,簡單的說,就是為這個大架構稱之為Prism,如果要使用Prism,就必須要安裝Prism Framework,而這個Prism Framework裡面其實使用了MEF來實作IoC架構達成替換模組的功能,而每個模組,其實還是可以繼續套用MVVM架構;所以我們可以看看下圖。

image

大家最熟悉的可能是MVVM那塊,就如小弟說的,MVVM架構出模組,而模組塞到畫面上去,那畫面在哪邊!?在Prism裡面,最外層最外層稱之為Shell,Shell也就是負責把整個程式的藍圖架構好,就好像土地重劃一樣,定義好這邊要蓋百貨公司,這邊要蓋民宅一樣;而Region就是代表著這區塊,未來準備蓋房子的地方;所以一個Shell可能會有多個Region。 ( 至於右邊的東西,未來會慢慢講到。 )

所以可以看到架構圖如下,最上層稱為Shell,然後Shell會設定多個Region,而每個Region會塞入View ( 依照IoC講法,應該稱為注入,所以未來會改用注入一詞"DependencyInjection,依賴注入" )。

image

結論

基本上,官網介紹的漏漏長,有興趣的可以去看看,但原則上觀念就是這樣,接下來,下一篇簡單的談談安裝。

參考資料

Sky & Study4.TW