Prism框架研究(一)

     从今天起开始写一个Prism框架的学习博客,今天是第一篇,所以从最基本的一些概念开始学习这个基于MVVM的框架的学习,首先看一下Prism代表什么,这里引用一下比较官方的英文解释来看一下:Prism was the code name for the guidance formally known as the Composite Application Guidance for WPF and Silverlight. For brevity and conciseness, and due to customer demand, this guidance is now referred to simply as Prism.Prism主要是用来开发具有多界面,丰富用户交互以及数据可视化特点的WPF以及Sliverlight的应用程序的具体呈现和商业逻辑,具体了解到了其基本概念之后,我们再来学习新的内容。

     一 为什么要使用Prism框架?

     在回答这个问题之前,我们不得不了解关于使用WPF或Siverlight开发客户端程序所面临的挑战。

     1  我们知道在软件开发的过程中,应用程序的需求是随着时间的推移发生重大改变的,在这个过程中会面临技术的不断更新,并且在开发周期中我们还会遇到用户的不断反馈,最终导致用户需求的不断变化,所以说在开发一个应用程序中如何构建一个随着时间的推移能够轻易去修改并且去扩展的应用程序就显得非常重要了,这甚至需要架构师去构建一个各个部分之间彼此独立,能够单独就行开发和测试,并且能够顺利进行更新和修改的模块化程序,而且其中的任意一个模块能够做到不影响其他的任意一个部分的逻辑功能,这个是非常重要的。

  2  另外一方面就是在一个企业级的应用开发可能涉及到多人协作开发,这里可能涉及到前台UI开发者,后台逻辑实现者,这么多人大家如何去协作开发,彼此独立,互不影响,并且最终能够组合成一个完整的项目,这对程序的开发者提出了一个巨大的挑战,所以Prism的出现为这些问题提供了一个高效的解决方案。

     3 对于一个大的并且耦合度非常高的应用程序,由于程序之间彼此没有明显的隔离,所以造成想要给应用程序添加或者更改一些特性变得非常困难,并且在这种系统中,如果想修复程序中其它部分的bug想要不影响整个系统的其它部分,这个是非常重要的。

       Prism的出现正是出于解决上面的一些问题,为构建一个:可重复利用的、可扩展的、灵活的、可以团队开发的、高质量的应用程序提供了一个很好的解决方案。

     二  Prism框架中一些非常重要的概念

       Modules:Modules是能够独立开发、测试、部署的功能单元,Modules可以被设计成实现特定业务逻辑的模块(如Profile Management),也可以被设计成实现通用基础设施或服务的模块    (如Logging、Exception Management)。
    Module Catalog:在Prism中,Module Catalog指明了要Load哪些Module,和用什么样的顺序去Load这些Module。
    Shell:Shell是宿主应用程序(host application),modules将会被load到Shell中。Shell定义了应用程序的整体布局和结构,而不关心寄宿其中的Module,Shell通常实现通用的application service和infrastructure,而应用的逻辑则实现在具体的Module中,同时,Shell也提供了应用程序的顶层窗口。
    Views:Views是应用中展现特定功能的视图,它展现UI、定义交互行为,并且通过数据绑定的方式与ViewModel进行交互。
    View Model和Presenters:View Model用来封装应用程序的UI逻辑及其状态。
       Model:Model被用来封装数据和相应的验证,以及相关的业务规则来保证数据的一致性和正确性。
       Commands:Command被用来封装应用程序功能,Prism提供了Delegate Command和CompositeCommand两个类。
       Regions:Regions是应用程序UI的逻辑区域,它很像一个PlaceHolder,Views在Regions中展现,很多种控件可以被用作Region:ContentControl、ItemsControl、ListBox、TabControl。Views能在Regions编程或者自动呈现,Prism也提供了Region导航的支持。
    Shell、Region和View的关系如图所示:

  Navigation:Prism支持两种导航:state-based导航和view-switching导航。
  EventAggregator:组件通常要和其它的组件或者服务进行通信。为此,Prism提供了EventAggregator组件,这个组件实现pub-sub事件机制,允许一些组件发布事件,另一些组件去订阅事件而无需两个组件之间的引用。
  Dependency Injection container:Prism使用依赖注入模式来管理组件之间的依赖,Prism被设计使用Unity、Mef等依赖注入容器。
  Services:Services是用来实现非UI相关功能的逻辑,例如logging、exception management、data access。Services可以被定义在应用程序中或者是Module中,Services通常被注册在依赖注入容器中,使得其它的组件可以很容易的定位这个服务。
  Controllers:Controller被用来控制在Region中哪个View将会被呈现,同时控制这个View的创建和初始化。
  Bootstrapper:Bootstrapper用来初始化应用程序级别的组件和服务,它也被用来配置和初始化module catalog和Shell 的View和View Model。功能如图: 

原文地址:https://www.cnblogs.com/seekdream/p/5771377.html