- 浏览: 2678772 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
80后的童年2:
深入浅出MongoDB应用实战开发网盘地址:https://p ...
MongoDB入门教程 -
shliujing:
楼主在不是精通java和php的前提下,请不要妄下结论。
PHP、CakePHP哪凉快哪呆着去 -
安静听歌:
希望可以一给一点点注释
MySQL存储过程之代码块、条件控制、迭代 -
qq287767957:
PHP是全宇宙最强的语言!
PHP、CakePHP哪凉快哪呆着去 -
rryymmoK:
深入浅出MongoDB应用实战开发百度网盘下载:链接:http ...
MongoDB入门教程
Keeping State on the Client
在第一部分里,我介绍了Cairngorm,一个简化大规模RIA开发中重复出现的复杂性的轻量级技术架构。
在这篇文章里,我描述了在开发企业RIA时面临的挑战 -- 特别是怎样在客户端保存状态。我在Cairngorm Store程序中解释了
这点。你将徐希Cairngorm架构里的两个基本模式:Value Object模式和Model Locator模式。在这篇文章结束时,你将了解
在你自己的Flex程序开发中使用这些模式。
介绍Cairngorm Store
Flex Store程序展示了Flex程序框架的特性。它展示了怎样使用多种layout containers、navigator containters、controls、
effects、data binding、Drag-and-Drop manager、form validation和History manager。
而且,Flex Store展示了Flex的组件开发模型和怎样创建与事件驱动架构集成的松耦合组件。学习Flex Store程序是熟悉使用
MXML和ActionScript开发声明式layout和业务逻辑的绝佳方式。
Cairngorm Store使用熟悉的Store程序并使用Cairngorm完全重新构建成为一个rapid,scalable和maintainable的企业RIA。
在第三部分我通过展示很容易就添加新功能性到Cairngorm程序来说明Cairngorm架构的好处。
Cairngorm Store:四个主要的挑战
我将解释怎样使用Cairngorm来解决RIA开发中常见的高级挑战。我也解释了Cairngorm框架里使用的多种设计模式。
一个好的技术架构首先将程序开发看作是商业问题的解决方案,然后作为一个实现该解决方案的系统,然后作为系统中自定义
软件的技术架构,最后作为该技术架构的详细的类级别的实现。
从高级来看,有四个主要的挑战Adobe consulting团队要面对:
1,在客户端保存状态
2,架构视图
3,推动FDD
4,调用服务端服务
这些挑战和需求对Cairngorm Store而言没有区别。
客户端展示要卖给客户的产品,购物车记住用户购买哪些产品,用户在结帐的流程中必须完成多页表单。在整个流程中,你的
程序必须在客户端维护状态。
单页面用户体验在页面中有许多不同的组件。有许多视图,如产品列表,图形显示,购物车,表单等等,你必须架构视图。
用户在程序中需要多个特性,用户必须能够做如下事情:
1,可以查看所有的产品以及对选择的产品可以浏览详细信息
2,添加产品到购物车或从购物车删除产品
3,购买购物车里的产品
4,继续完成结帐流程
这些特性驱动你的开发。
最后,程序出售的产品由于库存改变而更改。你的程序必须具有从服务端基础架构得到产品信息的能力。而且,当客户发送
订单时,你的程序必须将这些订单保存到数据库或SAP等系统。你的程序必须与服务端服务调用集成。
你可以看到,当学习这四个主要挑战时Cairngorm Store和其他RIA一样。
在这篇文章里,我们来看看第一个挑战:在客户端保存状态。
在客户端保存状态
你从Web程序开发移至RIA时首先要考虑的就是客户端是有状态的。
Web程序开发人员熟悉无状态请求/响应方式,因此,他们创建了多种方式来在客户端维护状态。你可以频繁的填充数据到
HTTP请求作为客户端而服务器更改页面,或者使用URL encoding或cookies来在客户端保存有限的状态信息,或使用这些
特性的抽象如J2EE sessions,保存在服务端,并让客户端可以访问。
但是,使用RIA,Web程序开发人员可以挣脱这些HTTP请求和响应的桎梏。你不需再构思无状态客户端的解决方案因为客户端
就是有状态的。如果你使用过Swing或AWT来构建桌面程序,你将耸耸肩因为这一切是如此熟悉。
MVC里State和Model的区别
许多开发人员熟悉程序开发里的MVC概念或Model/View/Control概念并想知道状态在这里的讨论中位于什么位置。非常简单,
状态就是模型。这展示了一些更常见的挑战来解决RIA里的模型的实现。
首先,我们抵制以字符串,数字,布尔值等所有primitive对象分散状态到你的程序中。这里使用面向对象开发最佳实践不是
我的目的。确实,接收OO原则的好处和实践是理解这篇文章的前提。
但是,我强烈推荐客户端保存数据 -- 作为状态,模型或任何称谓 -- 作为对象来具有语义含义。在这里语义是什么意思?
我的意思是如果你在线出售fly-fishing flies,你的对象模型应该包括flies,patterns,hooks和hackles。如果你出售
mortgages,你的对象模型应该包含products,rates,repayments和terms。如果你出售maps,你的对象模型可能包含routes,
waypoints,points of interest和gas stations。
同步客户端和服务端
RIA的有状态客户端的一个挑战是:客户端的状态通常反应了服务端的状态。让我们看看一些更多的设计问题。
在服务端程序开发中,一个首要挑战是状态通常位于两个层面:业务层和集成层。
集成层通常包含数据库,mainframes,message queues,ERP解决方案,CRM系统以及其他企业信息系统等在对象上保存数据
并处理业务逻辑的系统。
在企业程序开发里,这些系统以中间件层来集成进来并展示给用户,通常也称作业务层。许多解决方案企图跨两层来保存
状态。首先,在这些层里数据的表示非常不同。例如,关系数据库里的实体,关系,视图,查询必须被映射到中间业务层的
对象模型。你可以使用EJB,Hibernate,ADO.NET等技术来跨架构层映射数据。
作为RIA开发人员,你被从业务和集成层间的复杂里抽象处理,你主要关注于怎样确保业务层的模型与展示层数据一致。
你可以通过确保客户端和服务端的对象模型一致来减少最少的努力来保持对象模型同步。
介绍Value Object / DataTransfer Object 模式
当你呈现数据到客户端时,创建类或对象来表示数据是最好的了。例如,在Cairngorm Store里,产品就是我们需要展示的
东西。每个产品有一些属性:name,description,price,image和thumbnail iamge。
这些值对象在RIA里扮演这双重角色。除了在客户端保存状态外,它们也对程序的不同层交互数据非常有用。在服务端,考虑
你使用SQL查询数据库的策略...太罗嗦了,受不了了!
六,看看Cairngorm Store程序里的VO,在org/nevis/cairngorm/samples/store/vo包:
如果程序必须知道当前选择的product是什么,以ProductVO实例在客户端保存信息即可。如果程序需要在客户的购物车保存产品列表,以
ProductVO实例的列表信息保存即可。
而且,如果你需要从服务端传输products或传输products回到服务器,将数据作为对象传输即可。
在Flex和Java之间维持一个一致的对象模型
省略很多废话...
为了允许Flex映射客户端和服务端的value objects,你必须告诉Flex这些类之间的关系。在Cairngorm里,你通过如下方式即可:
这行代码确保客户端的ProductVO类映射到服务器上org.nevis.cairngorm.samples.store.vo包下的的ProductVO这个Java类
同XDoclet2使用ActionScript
XDoclet2是一个Java驱动的ActionScript代码生成器。
将模型和视图绑定在一起
进入Model Locator模式
Adobe Consulting团队构思了Model Locator模式作为FLex开发人员的最佳实践。
我真服了,又一个《Ruby for Rails》作者的同仁,婆妈大人。
结论是: Cairngorm连一篇像样的文档都没有。不再继续翻译Webster的六部曲了。
在第一部分里,我介绍了Cairngorm,一个简化大规模RIA开发中重复出现的复杂性的轻量级技术架构。
在这篇文章里,我描述了在开发企业RIA时面临的挑战 -- 特别是怎样在客户端保存状态。我在Cairngorm Store程序中解释了
这点。你将徐希Cairngorm架构里的两个基本模式:Value Object模式和Model Locator模式。在这篇文章结束时,你将了解
在你自己的Flex程序开发中使用这些模式。
介绍Cairngorm Store
Flex Store程序展示了Flex程序框架的特性。它展示了怎样使用多种layout containers、navigator containters、controls、
effects、data binding、Drag-and-Drop manager、form validation和History manager。
而且,Flex Store展示了Flex的组件开发模型和怎样创建与事件驱动架构集成的松耦合组件。学习Flex Store程序是熟悉使用
MXML和ActionScript开发声明式layout和业务逻辑的绝佳方式。
Cairngorm Store使用熟悉的Store程序并使用Cairngorm完全重新构建成为一个rapid,scalable和maintainable的企业RIA。
在第三部分我通过展示很容易就添加新功能性到Cairngorm程序来说明Cairngorm架构的好处。
Cairngorm Store:四个主要的挑战
我将解释怎样使用Cairngorm来解决RIA开发中常见的高级挑战。我也解释了Cairngorm框架里使用的多种设计模式。
一个好的技术架构首先将程序开发看作是商业问题的解决方案,然后作为一个实现该解决方案的系统,然后作为系统中自定义
软件的技术架构,最后作为该技术架构的详细的类级别的实现。
从高级来看,有四个主要的挑战Adobe consulting团队要面对:
1,在客户端保存状态
2,架构视图
3,推动FDD
4,调用服务端服务
这些挑战和需求对Cairngorm Store而言没有区别。
客户端展示要卖给客户的产品,购物车记住用户购买哪些产品,用户在结帐的流程中必须完成多页表单。在整个流程中,你的
程序必须在客户端维护状态。
单页面用户体验在页面中有许多不同的组件。有许多视图,如产品列表,图形显示,购物车,表单等等,你必须架构视图。
用户在程序中需要多个特性,用户必须能够做如下事情:
1,可以查看所有的产品以及对选择的产品可以浏览详细信息
2,添加产品到购物车或从购物车删除产品
3,购买购物车里的产品
4,继续完成结帐流程
这些特性驱动你的开发。
最后,程序出售的产品由于库存改变而更改。你的程序必须具有从服务端基础架构得到产品信息的能力。而且,当客户发送
订单时,你的程序必须将这些订单保存到数据库或SAP等系统。你的程序必须与服务端服务调用集成。
你可以看到,当学习这四个主要挑战时Cairngorm Store和其他RIA一样。
在这篇文章里,我们来看看第一个挑战:在客户端保存状态。
在客户端保存状态
你从Web程序开发移至RIA时首先要考虑的就是客户端是有状态的。
Web程序开发人员熟悉无状态请求/响应方式,因此,他们创建了多种方式来在客户端维护状态。你可以频繁的填充数据到
HTTP请求作为客户端而服务器更改页面,或者使用URL encoding或cookies来在客户端保存有限的状态信息,或使用这些
特性的抽象如J2EE sessions,保存在服务端,并让客户端可以访问。
但是,使用RIA,Web程序开发人员可以挣脱这些HTTP请求和响应的桎梏。你不需再构思无状态客户端的解决方案因为客户端
就是有状态的。如果你使用过Swing或AWT来构建桌面程序,你将耸耸肩因为这一切是如此熟悉。
MVC里State和Model的区别
许多开发人员熟悉程序开发里的MVC概念或Model/View/Control概念并想知道状态在这里的讨论中位于什么位置。非常简单,
状态就是模型。这展示了一些更常见的挑战来解决RIA里的模型的实现。
首先,我们抵制以字符串,数字,布尔值等所有primitive对象分散状态到你的程序中。这里使用面向对象开发最佳实践不是
我的目的。确实,接收OO原则的好处和实践是理解这篇文章的前提。
但是,我强烈推荐客户端保存数据 -- 作为状态,模型或任何称谓 -- 作为对象来具有语义含义。在这里语义是什么意思?
我的意思是如果你在线出售fly-fishing flies,你的对象模型应该包括flies,patterns,hooks和hackles。如果你出售
mortgages,你的对象模型应该包含products,rates,repayments和terms。如果你出售maps,你的对象模型可能包含routes,
waypoints,points of interest和gas stations。
同步客户端和服务端
RIA的有状态客户端的一个挑战是:客户端的状态通常反应了服务端的状态。让我们看看一些更多的设计问题。
在服务端程序开发中,一个首要挑战是状态通常位于两个层面:业务层和集成层。
集成层通常包含数据库,mainframes,message queues,ERP解决方案,CRM系统以及其他企业信息系统等在对象上保存数据
并处理业务逻辑的系统。
在企业程序开发里,这些系统以中间件层来集成进来并展示给用户,通常也称作业务层。许多解决方案企图跨两层来保存
状态。首先,在这些层里数据的表示非常不同。例如,关系数据库里的实体,关系,视图,查询必须被映射到中间业务层的
对象模型。你可以使用EJB,Hibernate,ADO.NET等技术来跨架构层映射数据。
作为RIA开发人员,你被从业务和集成层间的复杂里抽象处理,你主要关注于怎样确保业务层的模型与展示层数据一致。
你可以通过确保客户端和服务端的对象模型一致来减少最少的努力来保持对象模型同步。
介绍Value Object / DataTransfer Object 模式
当你呈现数据到客户端时,创建类或对象来表示数据是最好的了。例如,在Cairngorm Store里,产品就是我们需要展示的
东西。每个产品有一些属性:name,description,price,image和thumbnail iamge。
这些值对象在RIA里扮演这双重角色。除了在客户端保存状态外,它们也对程序的不同层交互数据非常有用。在服务端,考虑
你使用SQL查询数据库的策略...太罗嗦了,受不了了!
六,看看Cairngorm Store程序里的VO,在org/nevis/cairngorm/samples/store/vo包:
class org.nevis.cairngorm.samples.store.vo.ProductVO implements ValueObject, Comparable { public static var registered:Boolean = Object.registerClass("org.nevis.cairngorm.samples.store.vo.ProductVO", ProductVO); public var id : Number; public var name : String; public var description : String; public var price : Number; public var image : String; public var thumbnail : String; }
如果程序必须知道当前选择的product是什么,以ProductVO实例在客户端保存信息即可。如果程序需要在客户的购物车保存产品列表,以
ProductVO实例的列表信息保存即可。
而且,如果你需要从服务端传输products或传输products回到服务器,将数据作为对象传输即可。
在Flex和Java之间维持一个一致的对象模型
省略很多废话...
为了允许Flex映射客户端和服务端的value objects,你必须告诉Flex这些类之间的关系。在Cairngorm里,你通过如下方式即可:
public static var registered:Boolean = Ojbect.registerClass("org.nevis.cairngorm.samples.store.vo.ProductVO", ProductVO);
这行代码确保客户端的ProductVO类映射到服务器上org.nevis.cairngorm.samples.store.vo包下的的ProductVO这个Java类
同XDoclet2使用ActionScript
XDoclet2是一个Java驱动的ActionScript代码生成器。
将模型和视图绑定在一起
进入Model Locator模式
Adobe Consulting团队构思了Model Locator模式作为FLex开发人员的最佳实践。
public static var selectedItem : ProductVo; public static var products : Array; public stativ var workflowState: Number; <details:ProductDetails id="productDetailsCOmp" width="100%" height="325" currencyFormatter="{ModelLocator.currencyFormatter}" selectedItem="{ModelLocator.selectedItem}" addProduct=addProductToShoppingCart{event}"/>
我真服了,又一个《Ruby for Rails》作者的同仁,婆妈大人。
结论是: Cairngorm连一篇像样的文档都没有。不再继续翻译Webster的六部曲了。
发表评论
-
Ext源码解析:3, DomHelper.js
2008-07-15 16:45 2432from http://www.beyondrails.com ... -
Ext源码解析:2, DomQuery.js
2008-07-11 10:54 2618fromhttp://www.beyondrails.com/ ... -
Ext源码解析:1, Ext.js
2008-07-09 18:08 2937来自http://www.beyondrails.com/bl ... -
Extjs Introduction
2008-07-08 02:04 8827from http://hideto.beyondrails. ... -
模拟Ajax提交上传文件
2008-06-04 00:24 4226XMLHTTP不支持文件上传这种form提交,但是我们可以模拟 ... -
escape JavaScript
2008-03-27 16:55 2650单引号、双引号、<script></scri ... -
Multiple IE
2007-11-22 10:35 2559老问题,js和css对跨浏览器兼容问题 在一台电脑上共存IE3 ... -
编辑表单后离开本页面时做提示(jQuery版)
2007-11-15 15:21 5045添加如下JavaScript: $.fn.enable_c ... -
正确使用Prototype,节省额外的100K
2007-11-10 23:20 3090Part I: http://thinkweb2.com/pr ... -
十大Web应用漏洞清单,XSS排名第一
2007-10-22 12:36 3114owasp.org列出十大Web应用漏洞清单: 1, Cros ... -
IE下不能disabled掉select标签的option的解决方案
2007-10-11 17:48 9026原文:Select, Option, Disabled And ... -
Jester: JavaScript Client for REST
2007-09-04 13:51 2723Jester: JavaScriptian REST介绍了Je ... -
ASCB阅读笔记五、Arrays
2007-08-23 10:47 1815var array:Array = new Array() ... -
ASCB阅读笔记四、Numbers and Math
2007-08-15 12:08 2020显示最近的整数(四舍五入) Math.round(204.49 ... -
ASCB阅读笔记三、Runtime Environment
2007-08-10 23:34 25151,检测用户浏览器安装的Flash Player版本 http ... -
ASCB阅读笔记二、Custom Classes
2007-08-09 10:54 13711,ActionScript 3.0已经完全OO,所有AS代码 ... -
ASCB阅读笔记一、ActionScript Basics
2007-08-07 23:29 20481,使用trace来debug程序 package { ... -
method_missing in ActionScript 3/Flex
2007-08-07 18:05 2004method_missing in ActionScript ... -
Hilog 0.1 released.
2007-08-07 00:52 2086Hilog 0.1 release is a demo of ... -
介绍Cairngorm
2007-08-05 15:36 19715Cairngorm是Adobe Labs上的Flex MVC框 ...
相关推荐
首先,客户端保存状态的四种常见方法: 1. ViewState:这是ASP.NET中最常用的状态管理方式,它将数据加密并嵌入到HTML页面中,用于在多个同一页的HTTP请求之间保持数据。ViewState适用于存储小到中等规模的数据,如...
一个可以保存客户端DOM状态的控件 可实现简单的非Ajax的ajax效果 比如禁用背景,浮动层位置保持,因为在页面回传之后通过脚本修改过的Dom属性会还原回去,具体请看示例 注意:使用该控件不可以再设置page的...
1. **Cookie机制**:是一种在客户端保存状态信息的方法。通过在用户设备上存储小块文本文件(Cookie),服务器可以识别特定的用户并维护其状态信息。Cookie通常包含会话ID、用户偏好设置等信息。 2. **Session机制...
8. **状态管理**:对于保存状态的管理,可以使用状态管理库如Redux或Vuex,来跟踪文章是否已成功保存,避免数据丢失或重复保存。 9. **本地存储**:在离线环境下,客户端可以使用浏览器的localStorage或IndexedDB...
1. **Cookie**:在客户端保存状态。服务器将状态信息编码后发送给客户端,客户端在后续请求时将这些信息返回给服务器。但Cookie存在大小限制和安全性问题。 2. **Session**:在服务端保存状态。服务器为每个用户...
Cookie机制允许服务器在客户端保存状态信息,这样用户在后续的请求中可以不用每次提供相同的数据。浏览器会根据存储的cookie信息,在与服务器交互时自动发送相应的cookie。这种机制使得服务器能够识别和管理会话状态...
在用户登录成功后,应用通常会保存一个登录状态标识,如一个布尔值或者自定义的Session对象。这个状态可以在应用启动时检查,如果为已登录状态,则直接跳转到主界面,无需显示登录页面。 5. 自动填充框架(Android...
1. 登录服务端管理界面,点击客户端下载按钮,将客户端保存到本地。 2. 将客户端解压出来,然后双击 凤凰卫士电子文档安全管理系统.msi 程序进行安装。在 Windows 7 和 8 系统中,如果提示权限不足,请右击 install....
这些方法可以是无参数的,也可以接受和返回对象,但它们不应该持有任何实例变量,因为它们不负责保存状态。 ```java public interface HelloWorldBean { String sayHello(); } ``` 2. **实现Bean类**:接着,我们...
这个话题“从客户端下载保存在数据库中的图像”涉及到多个技术环节,包括数据库管理、Web开发、文件I/O以及用户体验设计。下面我们将详细探讨这些知识点。 1. 数据库管理: - **BLOB类型**:大多数关系型数据库如...
ASP.NET 是一种强大的 web 应用程序开发框架,它提供了多种内置对象来帮助开发者在不同范围内保存和管理状态。在Web开发中,状态管理是非常关键的一环,因为HTTP协议本身是无状态的,每次请求之间不会共享任何信息。...
用户在使用WLAN客户端时,应确保下载来源的安全性,防止下载带有病毒的假冒客户端。同时,尽管客户端有内置的安全措施,但用户仍需定期更新密码,提高账户安全性。 **五、常见问题及解决方法** 在使用过程中,可能...
在这个话题中,我们将深入探讨即时通讯服务器和客户端的相关知识,以及如何通过Xmpp(Extensible Messaging and Presence Protocol,可扩展消息与存在协议)进行实现。 首先,我们要理解即时通讯的核心架构。一个...
- **资源消耗**:有状态Bean可能消耗更多资源,因为每个实例都要保存状态信息,而无状态Bean则相对轻量。 **4. 使用技巧与最佳实践** - **选择合适类型**:理解业务需求,根据是否需要维持状态选择合适的Bean类型...
FTP客户端在IT行业中是用于与FTP(文件传输协议)服务器进行交互的应用程序,它允许用户上传、下载或管理远程服务器上的文件。在这个“FTP客户端-c#程序”项目中,开发者使用了C#编程语言来实现这个功能,而没有依赖...
4. **保持会话(Session):** 当客户端断开连接时,Mqtt客户端可以保存会话状态,以便在重新连接时恢复未完成的传输。这有助于在网络不稳定时保证消息的完整性。 5. **心跳检测:** 为了检测客户端和服务器之间的...
5. **日志记录**:“log”文件可能保存了系统运行时的日志信息,这对于调试和问题排查非常重要,因为它记录了客户端和服务端交互的详细过程。 6. **使用说明**:“源码使用说明.txt”和“说明.txt”提供了关于如何...