在客户端保存状态

news/2024/5/19 19:27:16 标签: Flex, ActionScript, 设计模式, Adobe, MVC
[url=http://www.adobe.com/devnet/flex/articles/cairngorm_pt2.html]Keeping State on the Client[/url]

在第一部分里,我介绍了Cairngorm,一个简化大规模RIA开发中重复出现的复杂性的轻量级技术架构。

在这篇文章里,我描述了在开发企业RIA时面临的挑战 -- 特别是怎样在客户端保存状态。我在Cairngorm Store程序中解释了
这点。你将徐希Cairngorm架构里的两个基本模式:Value Object模式和Model Locator模式。在这篇文章结束时,你将了解
在你自己的Flex程序开发中使用这些模式。

[color=blue][b]介绍Cairngorm Store[/b][/color]
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。
[img]http://www.adobe.com/devnet/flex/articles/cairngorm_pt2/fig01.gif[/img]
在第三部分我通过展示很容易就添加新功能性到Cairngorm程序来说明Cairngorm架构的好处。

[color=blue][b]Cairngorm Store:四个主要的挑战[/b][/color]
我将解释怎样使用Cairngorm来解决RIA开发中常见的高级挑战。我也解释了Cairngorm框架里使用的多种设计模式

一个好的技术架构首先将程序开发看作是商业问题的解决方案,然后作为一个实现该解决方案的系统,然后作为系统中自定义
软件的技术架构,最后作为该技术架构的详细的类级别的实现。

从高级来看,有四个主要的挑战Adobe consulting团队要面对:
1,在客户端保存状态
2,架构视图
3,推动FDD
4,调用服务端服务

这些挑战和需求对Cairngorm Store而言没有区别。

客户端展示要卖给客户的产品,购物车记住用户购买哪些产品,用户在结帐的流程中必须完成多页表单。在整个流程中,你的
程序必须在客户端维护状态。

单页面用户体验在页面中有许多不同的组件。有许多视图,如产品列表,图形显示,购物车,表单等等,你必须架构视图。

用户在程序中需要多个特性,用户必须能够做如下事情:
1,可以查看所有的产品以及对选择的产品可以浏览详细信息
2,添加产品到购物车或从购物车删除产品
3,购买购物车里的产品
4,继续完成结帐流程

这些特性驱动你的开发。

最后,程序出售的产品由于库存改变而更改。你的程序必须具有从服务端基础架构得到产品信息的能力。而且,当客户发送
订单时,你的程序必须将这些订单保存到数据库或SAP等系统。你的程序必须与服务端服务调用集成。

你可以看到,当学习这四个主要挑战时Cairngorm Store和其他RIA一样。

在这篇文章里,我们来看看第一个挑战:在客户端保存状态。

[color=blue][b]在客户端保存状态[/b][/color]
你从Web程序开发移至RIA时首先要考虑的就是客户端是有状态的。

Web程序开发人员熟悉无状态请求/响应方式,因此,他们创建了多种方式来在客户端维护状态。你可以频繁的填充数据到
HTTP请求作为客户端而服务器更改页面,或者使用URL encoding或cookies来在客户端保存有限的状态信息,或使用这些
特性的抽象如J2EE sessions,保存在服务端,并让客户端可以访问。

但是,使用RIA,Web程序开发人员可以挣脱这些HTTP请求和响应的桎梏。你不需再构思无状态客户端的解决方案因为客户端
就是有状态的。如果你使用过Swing或AWT来构建桌面程序,你将耸耸肩因为这一切是如此熟悉。

[b]MVC里State和Model的区别[/b]
许多开发人员熟悉程序开发里的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。

[b]同步客户端和服务端[/b]
RIA的有状态客户端的一个挑战是:客户端的状态通常反应了服务端的状态。让我们看看一些更多的设计问题。

在服务端程序开发中,一个首要挑战是状态通常位于两个层面:业务层和集成层。

集成层通常包含数据库,mainframes,message queues,ERP解决方案,CRM系统以及其他企业信息系统等在对象上保存数据
并处理业务逻辑的系统。

在企业程序开发里,这些系统以中间件层来集成进来并展示给用户,通常也称作业务层。许多解决方案企图跨两层来保存
状态。首先,在这些层里数据的表示非常不同。例如,关系数据库里的实体,关系,视图,查询必须被映射到中间业务层的
对象模型。你可以使用EJB,Hibernate,ADO.NET等技术来跨架构层映射数据。

作为RIA开发人员,你被从业务和集成层间的复杂里抽象处理,你主要关注于怎样确保业务层的模型与展示层数据一致。

你可以通过确保客户端和服务端的对象模型一致来减少最少的努力来保持对象模型同步。

[b]介绍Value Object / DataTransfer Object 模式[/b]
当你呈现数据到客户端时,创建类或对象来表示数据是最好的了。例如,在Cairngorm Store里,产品就是我们需要展示的
东西。每个产品有一些属性:name,description,price,image和thumbnail iamge。

这些值对象在RIA里扮演这双重角色。除了在客户端保存状态外,它们也对程序的不同层交互数据非常有用。在服务端,考虑
你使用SQL查询数据库的策略...太罗嗦了,受不了了!

六,看看Cairngorm Store程序里的VO,在org/nevis/cairngorm/samples/store/vo包:
[code]
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;
}
[/code]
如果程序必须知道当前选择的product是什么,以ProductVO实例在客户端保存信息即可。如果程序需要在客户的购物车保存产品列表,以
ProductVO实例的列表信息保存即可。

而且,如果你需要从服务端传输products或传输products回到服务器,将数据作为对象传输即可。

[color=blue][b]在Flex和Java之间维持一个一致的对象模型[/b][/color]
省略很多废话...

为了允许Flex映射客户端和服务端的value objects,你必须告诉Flex这些类之间的关系。在Cairngorm里,你通过如下方式即可:
[code]
public static var registered:Boolean = Ojbect.registerClass("org.nevis.cairngorm.samples.store.vo.ProductVO", ProductVO);
[/code]
这行代码确保客户端的ProductVO类映射到服务器上org.nevis.cairngorm.samples.store.vo包下的的ProductVO这个Java类

[b]同XDoclet2使用ActionScript[/b]
XDoclet2是一个Java驱动的ActionScript代码生成器。

[color=blue][b]将模型和视图绑定在一起[/b][/color]

[color=blue][b]进入Model Locator模式[/b][/color]
Adobe Consulting团队构思了Model Locator模式作为FLex开发人员的最佳实践。
[code]
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}"/>
[/code]

我真服了,又一个《Ruby for Rails》作者的同仁,婆妈大人。

结论是: Cairngorm连一篇像样的文档都没有。不再继续翻译Webster的六部曲了。

http://www.niftyadmin.cn/n/728142.html

相关文章

js怎么获取扫码枪条码_扫码枪不用密码就能把钱扫走?怎么才能取消?

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以免费收到最新内容了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注&#xff01; …

项目进度计划表的制作及甘特图的绘制

工程项目进度管理的目的就是为了实现最优工期&#xff0c;多快好省地完成任务。而项目进度表&#xff0c;就是用图形化来展示项目的进展过程&#xff0c;用来管控各个节点是否能如期完成&#xff0c;是一个比较形象化的工具。 你会做项目进度表么&#xff1f;如果你会excel的话…

计算机电源没有工作怎么解决,台式机电源供电不足怎么办 台式机电源供电不足解决方法...

台式机电源供电不足故障现象和解决方法:电脑电源功率不足故障现象&#xff1a;1、光驱本身完好&#xff0c;由于主板或数据线故障&#xff0c;某些配件接触不良&#xff0c;导致不能读盘解决办法&#xff1a;采用替换法排除 cpu、电源和其他配件的问题后&#xff0c;再用替换法…

过滤html标签

1.CommunityServer.config MarkUp标签设置需要过滤或者保存的标签2.HtmlScrubber处理过滤标签的类3.module.一般都是使用一个过滤的module.在该module中调用HtmlScrubber.这是一个很好的想法. 转载于:https://www.cnblogs.com/Elong/archive/2007/05/24/758346.html

pb 删除右边第一个字符_判断估值的第二个指标-PB

本文于11月5日始发于公众号&#xff1a;Gabriel没有特殊字符&#xff0c;weibo&#xff1a;后厂村名基上次和大家介绍了估值的第一个指标PE&#xff1a;初识估值-PE是什么&#xff0c;今天继续和大家介绍估值的第二个指标-PBPB&#xff0c;即为市净率&#xff0c;算法为股票市值…

项目管理中的进度控制与目标计划

项目进度控制是项目经理的一项重要职责。项目进度管理是在项目实施过程中&#xff0c;对各阶段的进展程度和项目最终完成的期限所进行的管理&#xff0c;目的是保证项目能在满足其时间约束条件的前提下实现其总体目标&#xff0c;在规定的时间内&#xff0c;拟定出合理且经济的…

计算机机房对于学生的需求,中等职业技术学校计算机机房的管理与维护

中等职业技术学校计算机机房的管理与维护中等职业技术学校计算机机房的管理与维护【摘要】 计算机机房日常管理繁琐&#xff0c;系统软件安装工作量大&#xff0c;实验环境维护困难。在总结实践经验的基础上&#xff0c;积极采用系统备份、硬件等技术对计算机机房进行有效管理与…

为什么要用项目管理软件管理项目进度

随着信息技术的发展&#xff0c;如何有效地管理企业项目已经成为了项目管理重点关心的问题和工作职责。很多小型企业采用传统的手工管理&#xff0c;但是这种方式复杂、数据不准确&#xff0c;不适用于企业项目管理&#xff0c;因此也成为企业发展的障碍。随着新的项目管理方法…