Prism初研究之简介
Prism初研究之简介
Prism相关资料
Prism吹水
Prism优点
关键技术概念
Module
Module catalog
Shell
Views
View model
Models
Commands
Regions
Navigation
EventAggregator
Dependency injection container
Services
Bootstrapper
使用Prism
定义Shell
创建Bootstrapper
创建Module
Prism相关资料
Prism吹水
Prism优点
关键技术概念
Module
Module catalog
Shell
Views
View model
Models
Commands
Regions
Navigation
EventAggregator
Dependency injection container
Services
Bootstrapper
使用Prism
定义Shell
创建Bootstrapper
创建Module
Prism相关资料
国内对Prism的传经授道很早就开始了,比如说博客园的周银辉和张兴浩,他们分别在自己的项目中使用到这个框架,因此有丰富的心得体会以及大量的介绍性文章,博客地址如下:
>
- 周银辉:http://www.cnblogs.com/zhouyinhui
- 张兴浩:http://www.cnblogs.com/Clingingboy
- 此外,P & P 官方论坛: http://compositewpf.codeplex.com/Thread/List.aspx
Prism吹水
Prism优点
- 界面与交互逻辑相剥离,从而美工和程序员可以各按其事,互不干扰;
- 把界面拆成小块的模块(Module),从而使模块将的交互实现最大的松耦合,降低“牵一发而动全身”的风险。此外,部署时可以实现按需加载和更新;
- 模块拆分,使得开发和测试也可以独立地进行,“开发未动,测试先行”。
- 最大程度的实现可复用(re-use)。尤其是面向切面的日志关联和权限管理。
关键技术概念
-
Module
一组独立开发、测试、配置的功能包,一般由分开的小组开发,多是一组业务相关的功能服务。一个典型的Prism程序由多个Module组成。 -
Module catalog
在复合应用程序中,模块的装载多发生在运行时,Prism使用Module catalog来指定加载的模块、加载时机、加载顺序。Module catalog由ModuleManager 和 ModuleLoader组件来使用。Prism允许三种使用方式:- 编码
- XAMl声明
- 配置文件
-
Shell
用于装载Module的主应用程序,提供顶层的窗口,它经常实现通用的应用服务和基础结构。大多数的应用程序功能在Module中实现。 -
Views
MVVM中的Views,通过数据绑定与View model进行交互。 -
View model
MVVM中的View Models,实现应用程序的展现逻辑,它们定义View中数据绑定使用的属性、命令、事件等。 -
Models
MVVM中的Models, 应用程序的数据和业务逻辑。包括相关的业务规则、数据验证,数据保持等等。 -
Commands
可以独立于UI进行测试,Prism提供DelegateCommand和CompositeCommand两个类,后者用于处理一组一起调用的命令。 -
Regions
在Shell或者Views中定义的UI逻辑区域。在Region中View可以自动地或者程序地显示。Prism还未Region实现了导航。可以通过RegionManager组件(使用RegionAdapter和RegionBehavior组件)来进行定位。 -
Navigation
Prism提供两种导航:- 基于状态的导航
- 视图切换的导航
-
EventAggregator
复合应用程序中的组件和服务需要一种松耦合的方式互相通信。Prism为此提供了EventAggregator组件。该组件允许定义在不同模块的组件进行相互通信。 -
Dependency injection container
Prism提供Unity和MEF两种依赖注入的方式,如需使用其他DI container,需要通过ServiceLocator。 -
Services
非UI相关的功能,比如日志、异常管理、数据访问。服务能通过一个模块来进行定义。经常使用DI方式来注册服务。 -
Bootstrapper
Bootstrapper初始化化各种各样的Prism组件和服务。而且经常用来初始化Module catalog和Shell视图,View Model等。
使用Prism
一个典型的Prism应用由一个Shell工程和多个Module工程组成。
定义Shell
创建Bootstrapper
每个Prism应用程序创建一个继承自UnityBootstrapper或者MefBootstrapper的bootstrapper。它的属性有Container、Shell、Logger、ModuleCata。
创建Module
一个实现IModule接口的类。
publicclassHelloWorldModule:IModule
{
privatereadonlyIRegionViewRegistry _regionViewRegistry;
publicHelloWorldModule(IRegionViewRegistry registry)
{
_regionViewRegistry = registry;
}
publicvoidInitialize()
{
_regionViewRegistry.RegisterViewWithRegion("MainRegion",typeof(Views.HelloWorldView));
}
}