掩面啊,想死啊,谁来救救我啊,第一章总算是要翻译完啦,还差最后一部分,如何使用Prism就OK了。明天搞定他,然后不上代码Coding简直就对不起我现在激动的心情,于是我打算先不翻译第二章,而是改为翻译文档中的附录H:手把手玩Prism的前几个示例。咳。。这辈子总能学会一个框架吧。
您可以在以下位置找到原文:
http://compositewpf.codeplex.com/releases/view/55580
前面的文字:
安装Prism
Prism概述
Prism关键概念
你可能使用和Prism不一样的设计模式和方法,或者你对设计模式等内容不熟悉。这一节提供了Prism所使用的重要概念的简介,也定义了一些在代码或者文档中所使用的术语。
l Modules(模块):Modules是一些可以独立开发,测试和(任意)部署的功能包。通常不同的模块是由不同的团队开发并且维护的。一个典型的Prism包含了若干个模块。Modules可以用来表示有特定的业务关系的功能(如配置管理器 profile management),并且封装了视图,服务,和实现所必要的数据模型。Modules也可以封装一些系统通用模块或服务(如日志,异常管理器)以方便它们在不同系统间复用。
l Module Catalog(模块列表):在一个复杂系统,模块必需在运行时由客户端加载和使用。在Prism中模块列表用来指定哪些模块应该加载,又应该在什么时候加载,以及用什么顺序加载。模块列表由ModuleManager和ModuleLoader两个负责远程加载,或者将模块加载到应用程序域和初始化的组件使用。Prism允许用多种方法定义模块列表,包括使用代码编程,使用XAML定义,或者使用配置文件。也可以根据需要自定义一个模块列表。
l Shell(真心不会翻译了,以前玩Linux都是直接叫Shell,这就暂时叫“壳”吧。我打英文很蛋疼):“壳”是应用程序加载的第一个模块,它定义了程序的总体布局和结构,它通常不知道在其内的实际应用模块。它通常实现了应用程序的基础服务和框架,大部分程序中功能性的模块都在它的里面运行。它提供了最顶层的的窗口或者可视化元素以便于载入不同的UI模块和功能模块。
l View(视图),视图是封装了特定特征和功能区域的用户界面,视图通常和MVVM和MVP设计模式相结合,它提供了一个UI和应用程序表现逻辑或数据间独立的关注点。视图用来封装用户接口和用户交互行为,因此视图可以独立与底层功能进行升级和替换。视图通过数据绑定与View Model或Presenter层相结合
l View Models和Presenters(这辈子没见过View Model的翻译),View Model是一些封装了应用程序表现逻辑和状态的类。它们是MVVM模式的一部分。View Model封装了应用程序中非常多的功能。Presenter与View Model一样也是封闭了应用程序表现逻辑和状态的类,它在MVP模式中被使用。两者都定义了属性,命令和事件,以及哪些控件应该要绑定数据。
l Models(模型),模型类是数据和应用程序逻辑的封装。它们是MVVM和MVP设计模式中的一部分。模型封装了数据和任何与之相关的验证,以及用来保证数据完整性和一致性的业务逻辑。
l Commands(命令),命令是应用程序功能的封装,在某种程序上它们可以与用户UI独立进行测试和定义。它们可以在View Model或者Presenters中被定义成为命令对象或者方法。Prism提供了DelegateCommond和CompositeCommand类。后者用来表示一组一起调用的命令的集合。
l Regions(区域),区域是一个定义在应用程序UI(Shell或者某个视图)中显示哪个视图的逻辑占位符。区域使应用程序可以在不更改代码的情况下切换布局。一些控件可以当成区域,因为他们可以显示其它视图的控件和内容,比如ContentControl,ItemsControl,ListBox,或者TabControl。视图可以通过编程或者自动的方式在区域中显示。Prism也支持在区域中实现Navigation(导航)。区域可以通过RegionManager放到其它组件中,使用RegionAdapter和RegionBehavior组件来调配显示在特定区域中的视图。
l Navigation(导航),(Navigation is defined as the process by which the application coordinates changes to its UI as a result of the user's interaction with the application or internal application state changes. 导航是应用程序响应用户操作并且显示更换相应UI或者状态的过程。)Prism支持两种状态的导航:基于状态导航,它是用来实现已经存在的视图的不同场景切换的导航;和视图切换导航,这是在应用程序UI中新视图创建并且代替旧视图的导航。视图切换导航的机制是基于URI的,与Prism regions一起可以实现一切灵活的导航结构。
l EventAggregator(事件聚合器),在一些复杂系统中,组件通常需要通过一些松耦合的方法与其它的组件或服务相交互。为了支持这些,Prism提供了EventAggregator组件来实现pub-sub事件机制,以此组件可以在不互相引用的前提下发布事件或者订阅其它组件的事件。EventAgrregator通常在不同组件中被定义以用来实现不同模块间的交流。
l Dependency injection container(依赖注入容器),依赖注入(DI)模式在Prism中普遍使用以保证组件间的依赖可以被管理。依赖注入可以保证组件间的依赖关系可以在运行时被满足,也保证组件的可扩展性和可测试性。Prism的依赖注入是通过Untity,MEF或者其它通过ServiceLocator开发的DI容器。
l Service(服务),服务是封装与UI无关功能的集合,比如日志,异常管理器或者数据通道。服务通常在依赖注入窗口中进行注册以使其它可以被其它依赖于它的组件所定位和组建。
l Controller(控制器),控制器是用来协调显示在应用程序UI区域中的视图的创建和初始化的类。控制器封装了检测何时应该显示哪个界面的表现逻辑。它使用了Prism的视图切换导航机制,它是基于URI来创建和切换当前区域中显示视图的导航机制。(The Application Controller pattern defines an abstraction that maps to this responsibility. Application Controller(应用程序控制器)模式定义了实现这些内容的抽象模型)。
l Bootstrapper(启动精灵),Bootstrapper是应用程序用来启动多种Prism组件和服务的组件。它用来初始化依赖注入容器来注册应用程序层的多种组件和服务。它也用来配置和初始化模块列表,Shell视图和视图模型或者表现界面。
l Multi-targeting(多重目标),Prism所开发的应用程序面向WPF和Silverlight。通过不同的设计模式,比如MVVM和MVP模式,你可以将UI和业务逻辑分离开。View Model, Presenter, Model类可以在WPF和Silverlight之间重用。而专门为WPF和专门为Silverlight开发的视图则可以独立封装。
Prism的设计可以让你可以根据需求和应用程序场景独立或者全部使用早期的功能或者设计模式。你可以使用MVVM模式,模块化,区域,命令,或者事件间的任何组合而不需要全部一起使用。当然如果你想获得松耦合和特殊关注点的完整收益,通常会使用多种Prism所提供的功能和设计模式。下图显示了一个典型的Prism应用程序的结构体系以及使Prism可以运用与多模块复杂系统中的所有功能。
大部分Prism应用程序包含一个Shell,并且在其中定义多个区域以用来显示顶层视图并且发布服务以便其它已载入模块的调用。Shell定义了一个目录用来记录到底模块是在加载的时候被载入或者是在使用时载入。而需要共享的服务和组件则是在程序启动时向Bootstrapper注册。
每个模块都封装了应用程序的一部分功能,并且可以使用表现层分离的设计模式,比如MVVM,它了定义的视图,视图模型,模型,和服务组件。当模块被载入时模块定义哪个视图要显示出来,而Shell定义视图显示到哪个区域。在初始化完成后,用户可以通过视图状态导航和视图间导航来可视化的切换区域中的视图或者视图中的不同状态。