Modules:模块是一个功能包,它可以被动力开发,测试以及部署。在很多情况下,模块被很不不同的team开发和维护。一个标准的Prism程序被创建成多个模块。模块可以用来表现指定的业务关系功能(例如用户资料管理)和封装用来实现这些功能的所有视图,服务和数据模型。模块也可以用于封装通用基础设施(公共模块)或者服务(例如登录和异常管理服务),这些可以被多个应用重复使用。
Module catalog:在一个组合应用程序中,模组(modules)必须在运行时被宿主程序发现和加载。在Prism中,模块(module)目录被用于指定哪些模块被加载,何时被加载,以什么样的顺加载。模块目录被?ModuleManager和ModuleLoader组件使用,它们的职能是下载远程模块,加载模组的集合到应用程序域中,然后初始化这些模块。Prism允许模块目录被不同的方式实现,包含在C#代码中实现,在XAML中声明,或者在一个配置文件中。 如果你需要也可以实现一个自定义的模块目录。
Shell:Shell就是加载模组的程序宿主(近似于程序主框架,通常比较简单,不同的VIEW将会被加载在其中,组成完整功能的程序UI)。Shell定义程序整体的布局和结构,但是通常没有意识到那些他将要使用的确切的模组。它经常实现一些通常的程序服务或者基础设施,但是多数程序的功能和内容在模块中实现。shell也提供上层窗口或可视化元素,这些窗口和元素接下来会用来包容加载的模组所提供的不同的UI组件。
Views:视图(们)是一些UI控件,用来封装程序特别的特色或功能的UI区域。视图被MVVM模式协调,MVVM用来提供UI、程序表示逻辑和数据的重要的分离。视图用来封装UI和定义用户交互行为,因此运行视图被更新或者替换,这是独立于应用底层逻辑的。视图使用数据绑定来与ViewModel和presenter classes.
View models and Presenters:视图模型(们)是一些类,这些类封装了应用呈现的逻辑和状态。它们是MVVM设计模式的一部分,视图模型封装了很多应用的功能。Presenters 和视图模型有点像,它们(指的是Presenter们)都是用来封装呈现的逻辑和状态。它们都是MVP模式的一部分。viewmodel和presenters为那些视图中可以进行数据绑定的控件定义了属性,命令和事件。
Models:模型类封装了应用的数据和业务逻辑。它们被作为MVVM和MVP模式的一部分来使用。模型通过封装数据以及任何相关的验证和业务规则来保证数据的一致性和完整性。(因此在get/set中加入一些业务的逻辑是对的)
Commands:命令允许独立于应用的UI之外来定义和测试,它们用于封装应用的功能。 (Commands are used to encapsulate application functionality in a way that allows them to be defined and tested independently of the application’s UI.保留原句,感觉看原句比看我翻译的都好理解)在视图模型和Presenter中,命令可以定义为命令对象或者命令方法。Prism提供DelegateCommand类和CompositeCommand类,后者被用于表示那些被召唤到一起的命令集合。
Regions: Regions是定义在应用UI中的逻辑占位符(在Shell或者在其它的视图中),视图会在其中显示。Regions允许在不需要改变程序逻辑的情况下更新应用UI的布局。很多普通的控件都当做regions来使用,允许视图自动在控件中显示,就像ContentControl,ItemsControl,ListBox或者TabControl。 视图可以以编程的方式或者自动被显示在region中。Prism也支持用regions来实现导航。Regions可以通过RegionManager组件定位于其它组件中,RegionManager使用 RegionAdapter和RegionBehavior组件调整某个regions中显示的视图。
Navigation:
作为用户与程序互动或者程序内部状态改变的结果,导航被定义为由应用坐标改变引发的一个过程。
Navigation is defined as the process by which an application coordinates
changes to its UI as a result of a user’s interaction with the application or
internal application state changes.
Prism支持两种风格的导航:基于状态的导航,当一个存在的视图更新状态时实现一个简单的导航场景;另一个是视图开关的导航,在应用UI中当新的视图被创建和旧的导航被替换时。视图开关(View-switching)导航使用基于URI的导航方式于Prism regions协调,并允许实现灵活的导航方案。
Event aggregator:复合程序中的组件常常需要使用一种松耦合的方式与程序中其它组件和服务通信。为了支持这个,Prism提供EventAggregator组件实现发布-订阅模式的事件机制,从而允许组件发布事件以及允许其它组件订阅这些事件,这不会产生引用。EventAggregator常定义在不同的组件中来与其它组件进行通信。
Dependency injection container: 依赖注入模式的使用贯穿整个Prism,用于管理组件间的依赖性。依赖注入允许组件在运行时实现依赖性,还有它支持扩展和测试性。Prism被设计成通过使用ServiceLocator与Unity和MEF,或者与任何其它的依赖注入容器共同工作。
Services:服务是组件,它们封装与UI无关的功能,例如日志,异常管理和数据访问。服务可以被应用或应用中的模组定义。服务经常用依赖注入容器注册,以便它们(服务)可以根据需要来设置和构造,还有被其它依靠服务的组件所使用。
Controllers:控制器是类,它们被用来设置构造和初始化在应用的region中显示的视图。控制器封装那些决定哪个视图显示的表现逻辑。控制器使用Prism的视图开关导航机制,这个机制提供可扩展的基于URI的导航机制去设置构造和布局regions中的视图。程序的控制器模式定义一个抽象概念去映射这些责任。
Bootstrapper:启动加载器组件被程序用来初始化各种Prism组件和服务。它被用来初始化依赖注入容器以注册任何应用层的组件和服务器。它同样也被用于配置和初始化模组目录和Shell的视图以及视图或者presenter。
Multi-targeting:Prism支持以WPF和Silverlight为对象的开发。通过使用分离表现的模式,就像MVVM和MVP模式,你可以从程序的表现和业务逻辑中分离程序的UI。ViewModel,presenter和模型类可以在同样的程序的WPF和silverlight版本中复用(很多WPF和SILVERLIGHT程序公用一套代码)。特定的WPF和特定的silverlight视图可以通过封装各自UI的方式被定义。
Prism被设计成这样以便于你可以单独使用任何的前面提到的能力和设计模式,或者在一起使用它们,这取决于你的需求和应用程序方案。你可以使用MVVM模式,模块化,regions,命令或者其中任何的组合而不需要全部使用它们。当然,如果你想要获得关注点分离和松耦合所提供的所有优点,你需要典型的使用Prism中很多的能力和设计模式,让它们之间互相协调。下面这张图展示了典型的Prism程序架构并阐述了这些Prism中的能力是如何在一个多模组复合程序中一起工作的。
多数Prism程序由一个shell应用组成,这个shell中定义了用于显示上层视图的regions和可以被加载模组访问的共享服务。这个shell定义了合适的目录以指定哪个模组在启动加载或马上需要加载,这是视情况而定的。一个依赖注入容器也被定义,它允许组件在运行时实现依赖性。在程序启动时启动加载器使用container注册共享服务和组件。单独的模组封装全部应用功能的一部分,然后使用一个类似MVVM的分离表现的设计模式定义视图,视图模型,模型和服务组件。当模组被加载时,在模组中定义的视图被显示在shell中定义regions中。当初始化完成后,应用中使用基于状态或视图开关的用户导航会导航到以设置视觉的更新或者显示regions中的新视图。