User Interface Process(UIP)AB 2.0 研究总结

** _ By Ben _
**


User Interface Process (UIP) Application Block - Version 2.0

环境 : WinXP , SQL Server 2000 + SP 3A , .Net 1.1, UIP 2.0

** 研究思路 ** :

1. 了解熟悉 UIP 和它的架构

2. 安装 UIP

3. 研究 demo, 了解 UIP 实际意义

4. 完成 UIP 应用的 helloworld 程序

5. 进而考虑总结实际项目中对 UIP 的可利用之处

** 概述 ** ** **

UIP 是 Application Block 之一 , 但它也使用到 Data Access Application Block.

UIP 设计出来的目的是实现我们以往设计 UI 的一些固定化的 UI 逻辑管理起来 , 并加以控制 .

根据 MVC 模式实现更复杂的 UI 逻辑 . 也就是将 UI Layer 的一些 logic 抽出来放在 Business 层

** UIP ** ** 的架构 ** :

UIP架构图

|

一些相关名词解释 :

** View **

与系统用户最接近的一层 , 也是 UI 可见的一部分 . UIP 提供

** WebFormView ** ** , **

** WindowsFormView ** ,

** WindowsFormControlView ** 来自定义我们的程序的 View. 相当于 MVC 的 View

** UIP Configuration **

一般是 workflow 等界面的或 UIP 的设置

** Controller **

觉得是 UIP 的中心 , 主宰 UI 逻辑的控制器

相当于 MVC 的 Controller

** State **

顾名思义 , 是管理状态的 , 相当于 MVC 的 Model

相关名词 : Task

---|---

** 1. ** ** 安装 ** ** **

此 Block 安装程序、 demo 的源码都是公开的 , 可以在微软网站上 download

download 安装包除这个 application 的数据库和全部源码外 , 还有几个 demo 源码

** 2. demo ** ** 分析 ** ** **

本次研究只重点研究 ** Store ** 的 Web Application 实例 .

这个 ** Store ** 工作流程

** Store工作流
View ** ** 的设置定义 ** ** **

而以上相关页面的 View Configuration 定义于 Web.Config:

< views >

< view name ="cart" type =" cart.aspx " controller =" StoreControllerNavGraph " />

< view name =" browsecatalog " type =" browsecatalog.aspx " controller =" StoreControllerNavGraph " />

< view name ="error" type =" uipError.aspx " controller =" StoreControllerNavGraph " />

< view name ="congratulations" type =" congratulations.aspx " controller =" StoreControllerNavGraph " />

< view name ="checkout" type =" checkout.aspx " controller =" StoreControllerNavGraph " />

< view name ="survey" type =" survey.aspx " controller =" SurveyController " />

** type ** : 是 asp.net 页面 . 由此看到 UIP 的一个局限地方 : 页面不能是带参数的地址 . 比如我们一般实现的新增记录就编辑记录是同一个页面 . 用一个类同 action=Edit/Add 的参数来区别页面是实现编辑还是新增 . 在这里只有分开两个页面来实现了 .

而以上的 view 的 asp.net 是 base on UIP 的 WebFormView . 至于 UIP 的 WebFormView 实现了什么 ? 实现 IView 和配置当前 view 的 Controller ( 将这里只粗略介绍 , 没详细研究 )

目的是为以下程序使用 Controller 实现界面逻辑作个前提 .

值得一提的是利用 UIP 实现工作流 , 工作流的设置也在 Web.Config 里

< navigationGraph

iViewManager =" WebFormViewManager "

name =" Shopping "

state ="State"

statePersist =" SqlServerPersistState "

startView =" browsecatalog "

cacheExpirationMode ="Absolute"

cacheExpirationInterval ="12:00:00">

< node view ='cart'>

< navigateTo navigateValue ="resume" view =' browsecatalog ' />

< navigateTo navigateValue ="checkout" view ='checkout' />

< navigateTo navigateValue ="fail" view ='error' />

< navigateTo navigateValue ="stop" view ='logon'/> < node view =' browsecatalog '>

< navigateTo navigateValue =" addItem " view ="cart"/>

< navigateTo navigateValue ="fail" view ='error' /> < node view ='error'>

< navigateTo navigateValue ="resume" view ='cart' /> < node view ="checkout">

< navigateTo navigateValue ="congratulations" view ="congratulations" />

< navigateTo navigateValue =" failCheckout " view ="checkout" /> < node view ='congratulations'>

< navigateTo navigateValue ="resume" view ='cart' />

< navigateTo navigateValue ="stop" view ='cart' />

结合 View 的定义设置 , 这个 < navigationGraph > 就好理解多了 , 它目的是定义流程的各个关键点 .

当界面调用

UIPManager.StartNavigationTask ( " Shopping", task );

// 解释 “ Shopping ” : navigationGraph 的标识名字 name

//task 是什么 ? task 就是主要是得到 CurrentTask ( 以下会提到的 ), 即当前的用户界面的 State

** controller ** : 引用哪个 UIP 的 Controller, Web.Config 也设置这个 Controller 的位置 :

< uipConfiguration enableStateCache ="true" allowBackButton ="true">

< objectTypes >

< iViewManager

name =" WebFormViewManager "

type =" Microsoft.ApplicationBlocks.UIProcess.WebFormViewManager , Microsoft.ApplicationBlocks.UIProcess ,

Version= 1.0.1 .0,

Culture=neutral,

PublicKeyToken =null"/>

……

< controller

name =" StoreControllerNavGraph "

type =" UIProcessQuickstarts_Store.StoreControllerNavGraph , UIProcessQuickstarts_Store.Common , Version= 1.0.1 .0,

Culture=neutral,

PublicKeyToken =null" />

< controller

name =" SurveyController "

type =" UIProcessQuickstarts_Store.SurveyController ,

UIProcessQuickstarts_Store.Common , Version= 1.0.1 .0,

Culture=neutral,

PublicKeyToken =null" />

< statePersistenceProvider

name =" SqlServerPersistState "

type ="Microsoft.ApplicationBlocks.UIProcess.SqlServerPersistState,

Microsoft.ApplicationBlocks.UIProcess ,

Version= 1.0.1 .0,

Culture=neutral,

PublicKeyToken =null"

connectionString ="server=.;database= UIPState;user id= UIP;password =U1Pr 0c 3ss"/>

由 UIP 可以猜想到 , 这些 Controller 是我们 base on UIP 的 ControllerBase , 是界面逻辑主要集中地方 . 可以简单的理解为使用 UIP 的 Navigator, 根据 View 的 Configuration 来实现界面跳转 , 见代码 :

State.NavigateValue = " StoreForm ";

Navigate( );

// 解释 “ StoreForm ” : navigationGraph 定义的 navigateValue 导航指向 View 的标识

// Navigate(); 就实现 redirect 了 .

** State ** ** ( ** Model ) : 主要负责用户界面状态的管理 <SPAN lang=EN

Published At
Categories with Web编程
Tagged with
comments powered by Disqus