RIAQ?/span>Rich Internet Application的羃写?/span>RIA是拥有传l本地应用的功能和效果的Web应用?/span>RIA一般把UI相关的处理交l了(jin)Web客户端,但是大量的数据(包括应用的状态、数据等Q还是交l服务端处理
AjaxQ又写ؓ(f)AJAXQ是"Asynchronous JavaScript and XML"的羃写。是一U用浏览器技术进?/span>RIA开发的技?/span>
dojoQ由dojo foundation理的一个开?/span>JavaScript框架。提供了(jin)很好?/span>JavaScript扩展Q目前被IBM?/span>Sun{大公司支持和?/span>
JsonQ? JavaScript Object Notation的羃写。它是一U纯文本的数据对象传输协议,?/span>Ajax的应用中被广泛采?/span>
CRUDQ?/span>CreateQ创建)(j)?/span>RetrieveQ获取)(j)?/span>UpdateQ更斎ͼ(j)?/span>DeleteQ删除)(j)q四U简单的数据操作的羃?/span>
FormQ本文中?/span>Form指的是经q?/span>Ajax扩展的简单的HTML?sh)子表单。表单内部可以拥有很多如ComboBox?/span>TextBox{构件。一般来_(d)一个表单对应着一个业务的数据对象
TreeQ树(wi)形显C结构化数据的构Ӟ׃数据是高度结构化的,往往可以采用懒加载等技术来提高性能
GridQ以表格形式昄和编辑数据的UI构g。一般分_(d)标题栏)(j)、表w(数据列表Q和表尾Q合计、状态显C等Q三个部分。其中,表头可以是复合的表头Q而表w可以是复合的格式(Tree?/span>Grid?/span>ComboBox?/span>CheckBox{)(j)。一?/span>Grid可以有一个复杂的Grid定义
Enhanced GridQ下面简UCؓ(f)EGridQ是Grid的扩展。在Grid的功能基之上提供?jin)数据获取和数据持久化的能力Q可以大大的减少开发应用的旉Q?/span>Ext中的Grid可以认ؓ(f)是一?/span>化了(jin)的EGridQ?/span>
CodeListQ代码表Q一般用在下拉列表数据处Q在pȝ的实CQ由于性能以及(qing)标准的要求,下拉列表一般都是采用代码保存数据,但是用户在填写表单的时候需要看到正常的文字而不是代码,q就需要系l通过CodeListq行文字和代码的转换
LRUQ?/span>Least Recent Used的羃写,是一U简单的~存{略Q如果缓存已满,那么释放最q最用的那个~存数据
RESTQ是REpresentational State Transfer的羃写,是一U基?/span>轻量U?/span>WebService协议
q个blog已经荒废近一q了(jin)Q久也不写,自然有很多的理由Q但更多的怕是懒吧。不说闲话了(jin)Q{入正题?/p>
关于ZJavaScript的RIA客户端数据处理这个话题,我打分成两文章来写,一陈q我所ȝ出的ZB/Sl构的RIA客户端数据处理的问题Q另一则陈述针对q些问题我所提出的技术解x案构架?/p>
关于RIA其是基于Ajax的RIA怕是屡见不鲜?jin)吧Q尤其是在Google推手之后Q文字处理、表格处理、灯片放映q种看v来非常客L(fng)的应用,都可以采用Ajax的技术来实现?jin)。作Z个关注企业应用开发的技术h员,一个很自然的想法就?x)生,是否可以采用q种技术来改进我们ZJava EE技术开发的B/Sl构的企业应用呢Q?/p>
先说有没有必要,{案是肯定的。B/S被广病的一个问题就是降低了(jin)最l用L(fng)操作效率Q以我的l验来说Q用戯然普遍的感到Z览器的界面要漂亮得多,用鼠标操作也很直观,但是却实在比以前的界面复杂而且操作困难。而且每次面提交后的{待也实在是对工作效率的一个降低。当?dng)我这里也没有必要意义列DB/S在客L(fng)的缺点,实际上这个问题是被广泛认同的?/p>
再说可行性,可行性分ZU:(x)技术上的可行性以?qing)工E开发上的可行性?/p>
技术上的可行性就无须验证?jin),Google Reader、Gmail、Google Docs的稳定运行都是非常好的证明?/p>
但是它是否一定适合旉要求相对比较严格的工E开发呢Q?/p>
q就需要一个非常稳定的q_来进行支持,而且׃工程开发的Ҏ(gu)性,最好还要有可视化的开发和调试环境才更有说服力。目前看来是没有非常完善的,但是很多的Ajax框架Q如Ext、GWT、Tibco GI以及(qing)服务端框架Struts2、JSF{,都在以自q方式实现着。关于这个方面的探讨我打放C一个系列《基于MDA的企业应用RIA解决Ҏ(gu)》里面讨论,不在q里多费口舌?jin)?/p>
技术上是可行的Q而如果又一个非常稳定和成熟的^台支持的话,在工E开发上也是可行的,那么q个q_怎样才算是稳定和成熟的呢Q本pd讨论的就是其中的一部分Q客L(fng)的数据处理?/p>
RIAQ?/span>Rich Internet Application的羃写?/span>RIA是拥有传l本地应用的功能和效果的Web应用?/span>RIA一般把UI相关的处理交l了(jin)Web客户端,但是大量的数据(包括应用的状态、数据等Q还是交l服务端处理
AjaxQ又写ؓ(f)AJAXQ是"Asynchronous JavaScript and XML"的羃写。是一U用浏览器技术进?/span>RIA开发的技?/span>
ECMA ScriptQ由European Computer Manufacturers AssociationQ欧z计机刉商协会(x)Q维护的一个脚本语a标准。当前最通行的版本是ECMA-262 Edition 3Q通常也被UCؓ(f)JavaScript 1.5
dojoQ由dojo foundation理的一个开?/span>JavaScript框架。提供了(jin)很好?/span>JavaScript扩展Q目前被IBM?/span>Sun{大公司支持和?/span>
JsonQ? JavaScript Object Notation的羃写。它是一U纯文本的数据对象传输协议,?/span>Ajax的应用中被广泛采?/span>
CRUDQ?/span>CreateQ创建)(j)?/span>RetrieveQ获取)(j)?/span>UpdateQ更斎ͼ(j)?/span>DeleteQ删除)(j)q四U简单的数据操作的羃?/span>
FormQ本文中?/span>Form指的是经q?/span>Ajax扩展的简单的HTML?sh)子表单。表单内部可以拥有很多如ComboBox?/span>TextBox{构件。一般来_(d)一个表单对应着一个业务的数据对象
TreeQ树(wi)形显C结构化数据的构Ӟ׃数据是高度结构化的,往往可以采用懒加载等技术来提高性能
GridQ以表格形式昄和编辑数据的UI构g。一般分_(d)标题栏)(j)、表w(数据列表Q和表尾Q合计、状态显C等Q三个部分。其中,表头可以是复合的表头Q而表w可以是复合的格式(Tree?/span>Grid?/span>ComboBox?/span>CheckBox{)(j)。一?/span>Grid可以有一个复杂的Grid定义
Enhanced GridQ下面简UCؓ(f)EGridQ是Grid的扩展。在Grid的功能基之上提供?jin)数据获取和数据持久化的能力Q可以大大的减少开发应用的旉Q?/span>Ext中的Grid可以认ؓ(f)是一?/span>化了(jin)的EGridQ?/span>
CodeListQ代码表Q一般用在下拉列表数据处Q在pȝ的实CQ由于性能以及(qing)标准的要求,下拉列表一般都是采用代码保存数据,但是用户在填写表单的时候需要看到正常的文字而不是代码,q就需要系l通过CodeListq行文字和代码的转换
LRUQ?/span>Least Recent Used的羃写,是一U简单的~存{略Q如果缓存已满,那么释放最q最用的那个~存数据
RESTQ是REpresentational State Transfer的羃写,是一U基?/span>轻量U?/span>WebService协议
数据l定Q?/span>Data BindingQ?/span>
数据变更q踪Q?/span>Data Change TrackingQ?/span>
数据讉KQ?/span>Data AccessQ?/span>
数据~存Q?/span>Data CachingQ?/span>
数据查询Q?/span>Data QueryQ?/span>
数据处理Q?/span>Data ProcessingQ?/span>
概念Q?/strong>
以非常简单的声明方式实现Form?/span>Gridq种数据填写、修Ҏ(gu)件与数据之间的对应关pR?/span>
场景Q?/strong>
Forml定Q把一?/span>Form与一个数据对象通过声明的方式绑定,使得Form的修改直接可以体现在数据对象中,而数据对象的修改也可以马上由Form体现出来
Gridl定Q把一?/span>Grid和一个数据对象集合通过声明或者设|数据源的方式绑定,使得?/span>Grid上的写操作都可以体现在数据对象集合中Q而数据对象集合的操作也可以马上由Grid构g体现出来
Treel定Q由?/span>Tree的特D性,与其?/span>Tree与一个数据对象集合绑定,不如?/span>Tree使用?jin)一个可以根据查询提供数据的数据来源更合适。当?dng)׃?/span>Tree有可能被可视化的修改Q如l织机构理Q,所以这个数据来源必L持对数据的写操作
其它Q如菜单的绑定等Q相对于上述三个都属于非常用的绑定,而且如果上述l定能够实现Q那么其他的l定也可以采用同L(fng)技术实?/span>
概念Q?/strong>
Ҏ(gu)据的整个生命周期q行q踪。主要的目的是可以通过记录看出数据做了(jin)哪些改变Q然后根据这些改变做出相应的处理Q其使用场景?/span>Grid的变更提C?/span>Form修改的追t等?/span>
场景Q?/strong>
Grid变更提示Q在Grid中以明显的方式提C用户做?jin)哪些修?/span>
数据集合变更q踪Q根据变更的效果Q可以有选择的发送合适的数据l服务端q行处理
Form修改的追t:(x)为用户在提交Form时提C用户哪些重要的字段q行?jin)修?gu)供支?/span>
概念Q?/strong>
服务端与客户端数据传输的格式未必相同Q而且数据对象属性的cd{信息也需要一?/span>Meta Data API来进行支持。所以,抽象Z个抽象的拥有Meta Data的数据访问层是有意义的?/span>
场景Q?/strong>
数据对象元数据信息访问:(x)可以通过q些元数据信息了(jin)解数据对象的各个属性以?qing)对应的数据cdQ这一点对?/span>Json格式的数据传输尤光要,因ؓ(f)Json规范里面没有DateTimecdQ?/span>
数据写操作的l一事g定义Q通过Data Access API来访问数据,所有的写操作都?x)有l一的事件定义,?/span>JavaScript 1.5中,普通的JavaScript对象是做不到?/span>
l一的数据读取方式:(x)不管数据?/span>XML格式的还?/span>Json格式的,讉K数据的方式都是统一?/span>
概念Q?/strong>
数据~存是指把获得的数据以一定的{略~存hQ以备用的技术?/span>Cache是客L(fng)数据处理中涉?qing)到功能和性能的重要部分,原因误下面的场?/span>
场景Q?/strong>
ȝq行?/span>CodeListQ系l如果需要离U运行,那么CodeList肯定需要客L(fng)~存
ȝ表单填写Q如果允许用L(fng)U填写表单,那么需要采用客L(fng)~存{略保存用户的数?/span>
性能考虑Q向服务端发hQ服务端查询q返回属于非常耗费资源和时间的操作Q所以对于服务端的数据,客户端应该有一定的~存以及(qing)同步{略
概念Q?/strong>
数据查询的概念非常简单,Ҏ(gu)用户的查询条件向服务端发送查询请求,得到服务端返回的数据对象集合?/span>
但由于数据查询是pȝ中最常用的功能,所以,数据查询需要非常强大的功能。简单列丑֦下?/span>
场景Q?/strong>
h查询Q给Z个样本,比如{age : 20, gender : 'male'}Q返回所有符合样本的l果
模糊查询Q用户可以提供非明确的查询参敎ͼ如李Q?Q查询所有姓李的Q名字ؓ(f)三个字的人)(j)Q返回结果供用户q一步的{?/span>
Range查询Q根?/span>Start Index?/span>Countq回整个大数据集中的一部分Q一般用在分|询处理方面,当然也可以用在其他的需要整个数据集的一部分的地?/span>
逻辑查询Q采用逻辑操作Ҏ(gu)据进行过滤查询,比如Q?/span>employee中所有满?/span>age < 40 && age >30 && gender = ‘male’ && married条g的员工——年龄大?/span>30且小?/span>40的已婚男员工Q,实际上上面所说的查询都可以以某种方式归ؓ(f)逻辑查询的一U?/strong>Q之所以明的提出来,是因为查询的语法有可能有所不同Qƈ且有些构件或者服务会(x)Ҏ(gu)些查询有特别的需求或者加强的支持以简化开发的隑ֺQ提高开发的效率
自定义查询:(x)Ҏ(gu)用户的需要可以对上面的查询进行有机地l合
概念Q?/strong>
在数据查询、显C、修改和持久化的q程中,用户有可能还需要做一些监控,以及(qing)一些自定义的操作,如过滤、排序等。这需要一套数据处理的事g以及(qing)数据处理的方法。这些统一归到数据处理用例中。列丑֦下?/span>
场景Q?/strong>
数据处理事gQ数据的查询以及(qing)持久化过E中的事?/span>
数据qo(h)Q通过数据qo(h)Q查询前、查询后Q可以满x限控制等功能的要?/span>
排序Q可以对数据q行自定义的排序Q查询、查询结?/span>