** _ 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 ** ** 的架构 ** :

|
一些相关名词解释 :
** 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 ** 工作流程
** 
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