By Ben
User Interface Process (UIP) Application Block - Version 2.0<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
环境: WinXP, SQL Server 2000 + SP<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="3" unitname="a" w:st="on">3A</chmetcnv>, .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的架构:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" stroked="f" filled="f" o:spt="75" o:preferrelative="t" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0 "></f><f eqn="sum @0 1 0 "></f><f eqn="sum 0 0 @1 "></f><f eqn="prod @2 1 2 "></f><f eqn="prod @3 21600 pixelWidth "></f><f eqn="prod @3 21600 pixelHeight "></f><f eqn="sum @0 0 1 "></f><f eqn="prod @6 1 2 "></f><f eqn="prod @7 21600 pixelWidth "></f><f eqn="sum @8 21600 0 "></f><f eqn="prod @7 21600 pixelHeight "></f><f eqn="sum @10 21600 0 "></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype>
|
一些相关名词解释:
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" />
</views>
|
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>
<node view='browsecatalog'>
<navigateTo navigateValue="addItem" view="cart"/>
<navigateTo navigateValue="fail" view='error' />
</node>
<node view='error'>
<navigateTo navigateValue="resume" view='cart' />
</node>
<node view="checkout">
<navigateTo navigateValue="congratulations" view="congratulations" />
<navigateTo navigateValue="failCheckout" view="checkout" />
</node>
<node view='congratulations'>
<navigateTo navigateValue="resume" view='cart' />
<navigateTo navigateValue="stop" view='cart' />
</node>
</navigationGraph>
|
结合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=<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.0.1</chsdate>.0,
Culture=neutral,
PublicKeyToken=null"/>
……
<controller
name="StoreControllerNavGraph"
type="UIProcessQuickstarts_Store.StoreControllerNavGraph, UIProcessQuickstarts_Store.Common, Version=<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.0.1</chsdate>.0,
Culture=neutral,
PublicKeyToken=null" />
<controller
name="SurveyController"
type="UIProcessQuickstarts_Store.SurveyController,
UIProcessQuickstarts_Store.Common, Version=<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.0.1</chsdate>.0,
Culture=neutral,
PublicKeyToken=null" />
<statePersistenceProvider
name="SqlServerPersistState"
type="Microsoft.ApplicationBlocks.UIProcess.SqlServerPersistState,
Microsoft.ApplicationBlocks.UIProcess,
Version=<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.0.1</chsdate>.0,
Culture=neutral,
PublicKeyToken=null"
connectionString="server=.;database=UIPState;user id=UIP;password=U1Pr<chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="C" w:st="on">0c</chmetcnv>3ss"/>
</objectTypes>
|
由UIP可以猜想到, 这些Controller是我们base on UIP的ControllerBase, 是界面逻辑主要集中地方. 可以简单的理解为使用UIP的Navigator, 根据View的Configuration来实现界面跳转, 见代码:
State.NavigateValue = "StoreForm";
Navigate();
//解释 “StoreForm” : navigationGraph 定义的navigateValue导航指向View的标识
// Navigate(); 就实现redirect了.
State(Model): 主要负责用户界面状态的管理. 使用到Data Access Application Block来读取保存在数据库是用户界面状态.
<statePersistenceProvider
name="SqlServerPersistState"
type="Microsoft.ApplicationBlocks.UIProcess.SqlServerPersistState,
Microsoft.ApplicationBlocks.UIProcess,
Version=<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.0.1</chsdate>.0,
Culture=neutral,
PublicKeyToken=null"
connectionString="server=.;database=UIPState;user id=UIP;password=U1Pr<chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="C" w:st="on">0c</chmetcnv>3ss"/>
|
这里将界面状态数据库与系统应用数据库分开.
这个用户界面当前状态保存在Session里(如下表格), 同时会更新到以上设置的状态数据库里. 所以这里使用UIP要注意的是Session的使用问题了.
会话状态
|
会话键
|
类型
|
值
|
|
|
|
|
|
|
|
TaskMoniker43d<chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="7" unitname="C" w:st="on">7c</chmetcnv>64e-8be1-4b0d-bc79<chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="442" unitname="a" w:st="on">-442a</chmetcnv>790173de
|
System.String
|
NewsManagement:list:43d<chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="7" unitname="C" w:st="on">7c</chmetcnv>64e-8be1-4b0d-bc79<chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="442" unitname="a" w:st="on">-442a</chmetcnv>790173de
|
|
|
|
|
|
|
|
CurrentTask
|
System.String
|
43d<chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="7" unitname="C" w:st="on">7c</chmetcnv>64e-8be1-4b0d-bc79<chmetcnv style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabindex="0" tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="442" unitname="a" w:st="on">-442a</chmetcnv>790173de
|
|
|
|
|
|
|
|
由以上:
UIP是将界面根据MVC的特点
基于asp.net的设计思想上搭建起来, 让程序员的工作主要集中在Controller设计上
开发应用配置
以下是针对我们一般使用vs.net开发做法来配置项目的UIP的过程步骤
1. 建立数据结构 (略, 请参考UIP安装后的demo数据库)
2. 建立Web Application Project 主要引用如下
a) Microsoft.ApplicationBlocks.UIProcess
分享到:
相关推荐
前段时间找到的 User Interface Process (UIP) Application Block 2.0 版
UIP(User Interface Process Application Block)是微软社区开发的众多Application Block中的其中之一,它是开源的。UIP是一个MVC框架,区别与其它的一些MVC框架是它不仅支持webForm(网页),同样也支持 winForm,但...
`uip_process`是UIP协议栈中的一个关键流程,主要负责处理TCP和UDP的数据传输。UIP(Tiny-IP)是一个轻量级的互联网协议栈,常用于资源有限的嵌入式设备。以下是`uip_process`流程的详细解释: 1. **参数检查与流程...
用户界面过程(USER_INTERFACE_Process)是软件开发中的一个重要概念,主要关注如何设计和管理用户与应用之间的交互。这个过程涉及到用户界面组件、表现层设计、框架构建、UI间的调用以及流程控制等多个方面。 首先...
uIP-1.0源码 uIP is a very small implementation of the TCP/IP stack that is written by Adam Dunkels <adam@sics.se>. More information can be ...unix/ - uIP as a user space process under FreeBSD or Linux
随着技术的发展和技术社区的贡献,诸如Tom Blanchard的文章“Code Snip: Simulating the ASP.NET 2.0 Wizard Control with ASP.NET 1.x”以及Microsoft的User Interface Process (UIP) Application Block上的Wizard ...
UIP,全称是“User Interface Protocol”,是一种轻量级的网络协议,主要用于嵌入式设备和微控制器之间的通信。这个标题“uip0.9+1.0”指的是UIP协议的0.9和1.0两个版本的源代码集合,可能包含了该协议实现的更新和...
uIP 处理动态页面方法 uIP 处理动态页面方法是指在 uIP 微型 WEB 服务器中处理动态页面的方法。动态页面是指在客户端请求时,服务器端根据请求信息动态生成的 HTML 页面。uIP 处理动态页面方法可以使用 HttpWatch ...
UIP(User-friendly IP)是一种轻量级的TCP/IP协议栈,特别适用于资源有限的嵌入式系统,如微控制器或者物联网设备。这个资料包包含了UIP 0.9和UIP 1.0的相关文档和源代码,对于想要深入理解和实现嵌入式设备上的...
5. **TCP/IP协议栈**:uIP库中的主要函数如`uip_connect()`、`uip_listen()`、`uip_send()`和`uip_close()`用于建立和管理TCP连接,而`uip_UDP_process()`用于处理UDP通信。开发者需要根据应用需求编写回调函数来...
UIP,全称为User Interface Protocol,是一种用于构建用户界面的协议或框架。这个压缩包包含了UIP1.0和UIP0.9两个版本的源代码,是理解UIP演变过程以及其设计思想的重要资料。在分析这些源代码时,我们可以深入学习...
串口转网口模块是一个可以让串口设备立即具备联网能力的设备联网... UIP(User Interface Process Application Block)是微软社区开发的众多ApplicationBlock中的其中之一,它是开源的。UIP是一个MVC框架,区别与其它
"神舟III+UCOSII+UIP"这个主题涵盖了三个关键的技术领域:神舟III嵌入式系统、UCOSII实时操作系统以及UIP(User Interface Protocol)用户接口协议。让我们逐一深入探讨这些知识点。 首先,神舟III是一个基于微处理...
UIP可能代表用户界面平台(User Interface Platform)或者是一种特定的编程库,它专注于提供清晰、无乱码的界面交互体验。官方程序意味着这是由UIP项目团队或开发商正式发布的,具有较高的可靠性和安全性。 描述中...
在IT行业中,UIP(User Interface Protocol)通常指的是用户界面协议,它是一种用于构建和管理图形用户界面的技术。UIP中文移植资料完整版是针对这个技术的中文版本,旨在帮助中国开发者更好地理解和应用UIP。这份...
总结,uIP协议栈是为嵌入式系统设计的一款强大而小巧的网络通信工具,其C语言实现和事件驱动的架构使得它在资源受限的环境中表现出色。通过理解uIP的工作原理和编程模型,开发者能够更好地利用这一工具,构建高效且...
UIP 配置函数 UIP 配置函数是 UIP 协议栈中的一组函数,用于设置 UIP 运行时参数,如 IP 地址、默认路由器地址、网络掩码和以太网 MAC 地址等。这些函数定义于 uip.h 和 uip_arp.h 文件中,分别用于设置和获取 UIP ...
总结来说,"uIP_TCP服务器"是基于uIP协议栈构建的服务器,具备主动发送数据的能力,这对于资源有限的嵌入式设备尤其有价值。通过参考提供的博客资源,开发者可以学习到如何在uIP环境下设置和管理TCP服务器,以及实现...
【基于UIP的简单WEB服务器】是一个项目,它在Visual Studio 2005(VS2005)开发环境中,利用UIP(User Interface Protocol)的API接口实现了一个基本的WEB服务器功能。UIP是一种轻量级的网络协议,主要用于嵌入式...
UIP(User Interface Protocol)是一种轻量级的网络协议,主要设计用于资源有限的设备,如8位单片机。在8位单片机上使用UIP,可以实现基本的网络功能,例如TCP/IP通信,使得这些小型设备也能接入互联网。下面我们将...