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会是一个很好的选择。