Prism初研究之简介

Prism初研究之简介

Prism相关资料

国内对Prism的传经授道很早就开始了,比如说博客园的周银辉和张兴浩,他们分别在自己的项目中使用到这个框架,因此有丰富的心得体会以及大量的介绍性文章,博客地址如下:

>

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

一个典型的Prism应用由一个Shell工程和多个Module工程组成。
典型Prism应用架构

定义Shell

定义Shell

创建Bootstrapper

定义Bootstrapper
每个Prism应用程序创建一个继承自UnityBootstrapper或者MefBootstrapper的bootstrapper。它的属性有Container、Shell、Logger、ModuleCata。

创建Module

一个实现IModule接口的类。

  1. publicclassHelloWorldModule:IModule
  2. {
  3. privatereadonlyIRegionViewRegistry _regionViewRegistry;
  4. publicHelloWorldModule(IRegionViewRegistry registry)
  5. {
  6. _regionViewRegistry = registry;
  7. }
  8. publicvoidInitialize()
  9. {
  10. _regionViewRegistry.RegisterViewWithRegion("MainRegion",typeof(Views.HelloWorldView));
  11. }
  12. }





posted @ 2016-08-24 21:58  qianzi  阅读(1074)  评论(0编辑  收藏  举报