(翻译)UIP Application Block学习系列 ( 八 ) UIP Application Block的元素
为了理解UIP Application Block的设计,理解它组成元素的细节是很重要的。下面就讨论这些元素:
UIP Manager----提供UIP Application Block的入口点,用不同的导航器开始或者读入作业。
为了使用UIP AB的功能,你的应用程序必须调用UIP Manager来开始一个UIP作业并启动一个合适的导航器。UIPManager类包含的静态方法让你可以用不同的导航器开始或者读入作业。(如表一)
表一: UIPManager启动导航器和作业的公共方法
方法 |
描述 |
StartNavigationTask |
Starts a graph navigator–based task. The name of the graph navigator in the configuration file must be provided. |
StartOpenNavigationTask |
Starts an open navigator–based task with no restrictions on transitions between views. An initial view name must be specified. |
StartUserControlsTask |
Starts a user controlled navigator–based task. The name of the user controls navigator in the configuration file must be provided. |
这些方法被重载了许多,所以你可以使用不同的参数调用。在一些情况下你可能要创建一个新的作业并且在其他的地方读入这个已经存在的作业。UIP Manager依赖发送到StartNavigationTask,StartOpenNavigationTask,或者StartUserControlsTask方法的参数创建一个合适的导航器实例。更多信息请参考”开始和重新读入作业”章节。
UIPManager类也允许你通过NavigationEvent事件侦听导航器的改变。NavigationEvent事件在Controller类的Navigate方法被调用时触发,but before actual navigation takes place。这是用户转到下个View之前你可以做一些事情的最后机会。更多信息请参考”引发导航器事件”。
UIP Configuration 类 – 找回, 校验和存储应用程序配置文件中包含的信息。
UIP Application Block使用UIPConfigHandler,UIPConfigSettings和UIPConfiguration类照会和维护来自配置文件的信息。UIPConfigHandler类实现了.net framework中IConfigSectionHandler接口,用来检验和分析配置文件中的<uipConfiguration>部分。它根据xml架构找回并验证配置信息,为block创建一个xml节点的实例,描述配置信息。UIPConfigSettings类分析xml节点从UIPConfigHandler中找回并读取应用程序的对象和block需要使用的方法。每一个应用程序有一个UIPConfigSettings对象的实例。UIPConfiguration类暴露一个UIPConfigSettings对象的实例给应用程序。
导航器
Navigator类
Navigator类是一个抽象类,提供所有导航器的一般功能的抽象,导航器类包含如下表一的五个属性:
表一: Navigator类属性
属性 |
描述 |
ViewManager |
Provides access to the view manager associated with the navigator. |
Name |
提供导航器的名字 |
CurrentState |
提供导航器当前状态 |
CacheExpirationMode |
为作业指明状态缓存的过期模式 |
CacheExpirationInterval |
Specifies the interval used to expire entries in the State cache. |
Navigator类的两个重要方法是Navigate()方法和OnStartTask方法。控制器通过调用Navigate方法通知导航器转移到哪个节点或者View,并把节点或者View名字作为参数。The OnStartTask method handles any StartTask events started by the Controller and is used to link tasks together。
Navigator类依赖于StartNavigationTast,StartOpenNavigationTask,StartUserControlsTask方法传递的参数有不同的行为:
l 如果没有创建task id 或者作业对象,导航器就认为它将创建一个新的task。导航器创建一个task id,在状态工厂中调用创建方法创建一个状态对象,在状态持久工厂中调用创建方法创建一个状态持久对象,然后在task中设置task id.
●如果创建的作业对象没有task ID,导航器就创建一个task ID并传递回给这个作业,然后导航器调用在状态工厂中Create方法创建一个状态对象,在状态持久工厂中调用Create方法创建状态持久对象并在作业中设置task ID.
●如果存在一个合法的作业对象和和相应的task ID,导航器就在状态工厂类(State factory class)中调用Load方法从状态持久器中找回适当的作业,然后把 task ID传回给状态对象。
Navigator类的表现方式也不同,它依赖于哪种视图被激活:
●如果你的应用正在展示第一个视图,那么这个视图就在配置文件中被指定,否则,在开放导航的情况下,将是StartOpenNavigationTask方法中的一个参数
●如果你的应用程序正在从一个被保存的状态中恢复一个View,导航器将检查来自保存状态的当前View,然后把它设为start View。
● 如果你的应用程序正在展示非第一个View,导航器将从UIPConfigSettings对象里找到这个View的配置信息,然后在状态对象里设置当前View属性的名字,清除navigateValue属性,保存状态,然后在适当的ViewManager里调用ActivateView方法。
对于web应用程序,导航器也用条件逻辑来测试用户是否被允许导航到一个指定URL或者单击向前向后按钮指向的页面。在导航器为View在GetController 方法中创建Controller之前,代码执行了以下的步骤:
1.导航器调用ActivateViewInStateIfNecessary内部方法。
2.这个方法调用在ViewManager中的IsRequestCurrentView检查被请求的页面是不是和当前状态中的页面相同。
3.如果状态不同,导航器校验配置文件中的AllowBackButton属性是不是可用。
4.如果AllowBackButton不可用,导航器就重新加载当前状态中的View,提示用户这是和以前一样的页面。
5.如果AllowBackButton可用,导航器将对Graph Navigators进行一次额外的检查确认用户没有导航到导航图以外。如果View在导航图中不存在,导航器重新加载当前状态的View, presenting the user with the same view as before.
6.如果View在当前导航图中存在或者如果导航图当前没有被使用,导航器加载请求的View.
UIP AB支持四种导航器,每一个都来自下面的导航器类:
l GraphNavigator –允许你为一个给定的作业定义View的进程和传送许可证。支持winform和webform.
l OpenNavigator – 允许你自由的在View之间传送,在传送过程中没有限制。同样支持winform和webform.
l UserControlsNavigator – 允许你在基于winform的程序中定义在不同控件之间的View和传输通行证,仅仅支持winform.
l WizardNavigator – 允许你定义View和在wizard中允许的传输。仅仅支持winform.
在每个作业中你职能指定一个导航器。如果你想在导航器之间进行传输,你需要创建一个新的作业来做这件事情。
客户有用的软件。