架构目标

  • 以模块化方式开发应用,这些模块被独立团队用WPF技术开发,集成,部署,这是使用Prism的最大好处。
  • 最小化交叉团队依赖。允许团队在不同领域专业化,比如UI设计,商业逻辑实现,基础代码开发
  • 架构用于提升不同团队(开发模块)的重复利用性。
  • 通过抽象出可在不同队伍使用的公共服务提升应用质量
  • 提升持续集成能力

关键概念

模块(Module)

所谓模块是指实现某个特定功能的包,一般是一个独立程序集。该包可以被单独开发,测试,部署。实现多人协作开发,解耦,以及复用。一个应用可以包含一个或多个模块。

模块目录(Module Catalog)

在组合式应用中,应用程序需要找到所有找到的模块,这里就需要使用模块目录。正如目录本身含义,目录是用于声明以及索引内容区域。模块目录用于标明什么模块被导入,什么时候导入,以什么顺序导入。我们可以使用多种方式指明模块目录,如代码,XAML或者配置文件。

壳(Shell)

所谓壳就是应用程序导入模块的容器,该容器不了解模块的具体内容。Shell确定整体布局以及应用程序组织架构。一般一个项目仅包含一个Shell,但支持多个Shell。

域(Region)

所谓域是定义在应用程序UI(如Shell或者Views)中的逻辑占位符,简而言之,为view提前占座。有很多控件可充当占位符,如ContentControlItemsControl, ListBox, TabControl。Prism使用域进行导航,可以使用RegionManager获取域,该RegionManager使用RegionAdapter和RegionBehavior协调特定域中view的显示。

事件聚合器(Event Aggregator)

所谓事件聚合器是一套实现发布-订阅(pub-sub)事件的机制。它允许某个部件发布一个事件,另一个部件订阅该事件,这个过程二者不需要添加任何指向对方的引用,完全解耦。常用于组件与组件或者组件与服务间的通信。

服务(Services)

所谓服务是封装非界面功能的组件,该服务不包含界面渲染,组织功能。服务一般定义在主项目或者一个单独的模块项目中。通常需要在依赖注入容器中注册,供其他模块使用。服务分为三个级别:

  • 核心级,由Prism提供,主要包括日志服务,域管理服务,模块服务。适用于所有Prism程序。
  • 应用级,由应用程序提供,应用级服务一般是基础服务,比如硬件层交互服务,数据库读写服务。一般在独立程序集定义,用于整个程序。
  • 模块级,由模块开发者提供,一般定义在该模块内,只用于单个模块。

引导程序(BootStrapper)

所谓引导程序就是连接应用程序,Prism库服务以及依赖注入容器的胶水。在引导程序中你需要完成初始化Shell,配置模块目录,配置拦截业务实现等功能。依据不同依赖注入容器,我们可以创建不同类型的引导程序,主要实现方法是继承UnityBootstrapper或者MefBootStrapper。

架构图

Shell、Region、View

所谓Shell就是应用程序主界面,简单来说就是UI容器。每个Shell可包含多个域(Region),每个域可包含多个视图(view)。

最新文章

  1. 细说Java主流日志工具库
  2. linux中rz中的-e选项
  3. RakNet发送与接收数据
  4. mac安装虚拟机
  5. C++STL - 类模板
  6. hiberante学习笔记
  7. 通过lua获取nginx的内置变量,通过这些变量做些逻辑的处理
  8. asp.net MVC 帮助助手和函数( @helper @functions)
  9. 3、颜色的字符串、十进制、十六进制相互转换(color convert between dec、hex and string )
  10. C#中的lock关键字;就是lock住一个大家都共同访问的(静态static的)东东就行了
  11. [设计模式] 20 状态模式 State Pattern
  12. homework-05 服务器与客户端
  13. Uva 1050 Ars Longa
  14. python ast
  15. rocketmq client for c#
  16. WatchKit编程指南:Watch Apps--文本、标签以及图片
  17. 关于读取XML文件代码【学习笔记】
  18. 网页数据抓取工具,webscraper 最简单的数据抓取教程,人人都用得上
  19. Mysql服务配置优化
  20. h5标签兼容

热门文章

  1. lua 源码阅读 1.1 -> 2.1
  2. day49 Pyhton 数据库Mysql 06
  3. boost之asio
  4. shell脚本获取随机数
  5. ES异常处理-NoNodeAvailableException
  6. 2020-2021-1 20209313 《Linux内核原理与分析》第一周作业
  7. 一文读懂MySQL的事务隔离级别及MVCC机制
  8. js堆排序
  9. xib使用
  10. 2020-2021-1 20209306 《linux内核原理与分析》第三周作业