Prism是由微軟Patterns & Practices團隊開發的針對WPF和Silverlight的MVVM框架。編程
Prism的幾個關鍵點:app
(1)啓動器類UnityBootstrapper框架
Silverlight程序入口處調用Bootstrapper.Run方法時,Prism會自動作一些初始化工做,包括讀取模塊信息表,建立模塊類實例並初始化(還能夠選擇按需加載模式OnDemand),以及在CreatShell中指定整個程序的根視圖。 模塊化
(2)繼承IModule接口,進行模塊初始化工做。 函數
構造函數中傳入UnityContainer容器(使用了IoC容器Unity),便可得到容器對象,後面須要大量使用UnityContainer對象的Resolve方法來獲取指定對象關聯的對象,即直接使用容器對象container來獲取實例或方法。設計
而後在Initialize中作一些模塊相關的初始化工做,好比監聽事件消息,當載入本模塊時,界面須要作一些什麼工做等等。模塊化開發
(3)UI管理RegionManager對象
以前在模塊初始化時說到界面須要作一些初始化工做,使用Prism框架,能夠很方便的進行UI控件的切換導航。blog
在模塊初始化的時候將須要用到的頁面進行註冊,當須要加載的時候就能夠直接將頁面加載到指定的區域。繼承
下圖便是在模塊初始化時註冊了某一個頁面「XXXMainView」,當監聽到加載頁面的事件時,就能夠將其加載到以前設計好的頁面區域「Page Region」。
(4)事件聚合服務EventAggregator
Prism提供了事件聚合服務EventAggregator,使用起來比委託事件更方便,註冊事件,而後直接發佈訂閱便可,模塊之間的通訊中將大量用到。
IoC即Inversion of Contro控制反轉,將代碼的控制權交由系統控制,好比對象的建立、方法的調用都交給Unity進行控制,Unity也是由微軟patterns& practices團隊用C#實現的輕量級、可擴展的依賴注入容器,這樣作的好處是消除模塊間的直接依賴,面向抽象即便面向接口編程,方便程序的擴展維護。
使用UnityContainer的容器對象,即圖中的m_Container、container,將對象與對象之間的關係進行註冊後(IDataService與XXXDataService),就能夠在整個程序任意地方再經過容器對象解析出該註冊對象,進而執行該註冊對象的屬性或方法,
這也是除了事件聚合服務EventAggregator外,模塊之間進行通訊的另外一辦法。
(1) 功能模塊化,將系統劃分爲多個獨立模塊,方便多人協同開發;
(2)有效減小程序大小,模塊化開發方式加上IoC,面向接口編程,模塊各司其職,使得模塊重複引用類庫狀況大爲減小,編譯出來的程序更小,對於Silverlight這種富客戶端,提升了加載速度。
(3)層次邏輯更加清晰,便於開發;
(4)模塊之間低耦合,當模塊沒有更新時,能夠unload,不須要從新編譯,大幅減小編譯時間。
(5)加強擴展維護性。
因此係統有必定複雜程度後,非Demo或原型系統時,採用Prism以及IoC會是一個很好的選擇。