??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成黄网在线观看,久久精品国产亚洲av麻豆蜜芽 ,亚洲视频手机在线http://m.tkk7.com/guitarpoet/archive/2007/12/15/javascript_ria_data_processing_2.htmlguitarpoetguitarpoetSat, 15 Dec 2007 05:15:00 GMThttp://m.tkk7.com/guitarpoet/archive/2007/12/15/javascript_ria_data_processing_2.htmlhttp://m.tkk7.com/guitarpoet/comments/167935.htmlhttp://m.tkk7.com/guitarpoet/archive/2007/12/15/javascript_ria_data_processing_2.html#Feedback0http://m.tkk7.com/guitarpoet/comments/commentRss/167935.htmlhttp://m.tkk7.com/guitarpoet/services/trackbacks/167935.html一、引?/h1> 上一讨Z(jin)关于客户端数据处理的一些问题,以简单的用例场景的方式描qC(jin)出来。很明显Q要惛_C个功能完整的Rich客户端的话,必须能够满上述用例场景的需求。能否根据这些需求做出合理的设计Q是一个挑战。尤其对于设计而言Q不同的人有着不同的风|而且׃背景不同Q也?x)有不同的见解。本文中Q我只是陈述?gu)q一些想法和设想Q更多的是希望能够抛砖引玉,通过在这个方面的讨论也能增进我的理解。呵c(din)?br />
很显?dng)blog的Ş式更适合作ؓ(f)思\的介l以?qing)探讨的q_Q而不是详l设计的文。而且很明显这一文章是承蝲不了(jin)所有的详细设计的。我争取把我在各个细化的斚w的想法在后箋的文章里面发出来。如果时间允许的话,整理出初始的文和代码,建立一个小的开源项目未不可(因ؓ(f)如此Q所有的JS都是采用英文来注释──其实q有一个原因是l习(fn)英文 :)Q。这都是后话?jin)?br />

二、羃略语

  1. RIAQ?/span>Rich Internet Application的羃写?/span>RIA是拥有传l本地应用的功能和效果的Web应用?/span>RIA一般把UI相关的处理交l了(jin)Web客户端,但是大量的数据(包括应用的状态、数据等Q还是交l服务端处理

  2. AjaxQ又写ؓ(f)AJAXQ是"Asynchronous JavaScript and XML"的羃写。是一U用浏览器技术进?/span>RIA开发的技?/span>

  3. PrototypeQ开源的优雅的Ajax以及(qing)JavaScript基础扩展框架。由于被Rails采用而闻名,使用相当q泛
  4. jQueryQ功能类似Prototype + script.aculo.us的开源Ajax框架。据我所知,Google用得比较?br />
  5. ExtQ对YUI的一个扩展的UI构g库。经q改q后Q可以用jQuery或者Prototype作ؓ(f)基础。目前好像正在完善自w的基础Ext base。以优秀的构仉名。虽然目前仍然属于商业构件库Q但是License相对宽松Q一般的商业应用可以免费使用
  6. dojoQ由dojo foundation理的一个开?/span>JavaScript框架。提供了(jin)很好?/span>JavaScript扩展Q目前被IBM?/span>Sun{大公司支持和?/span>

  7. JsonQ? JavaScript Object Notation的羃写。它是一U纯文本的数据对象传输协议,?/span>Ajax的应用中被广泛采?/span>

  8. CRUDQ?/span>CreateQ创建)(j)?/span>RetrieveQ获取)(j)?/span>UpdateQ更斎ͼ(j)?/span>DeleteQ删除)(j)q四U简单的数据操作的羃?/span>

  9. FormQ本文中?/span>Form指的是经q?/span>Ajax扩展的简单的HTML?sh)子表单。表单内部可以拥有很多如ComboBox?/span>TextBox{构件。一般来_(d)一个表单对应着一个业务的数据对象

  10. TreeQ树(wi)形显C结构化数据的构Ӟ׃数据是高度结构化的,往往可以采用懒加载等技术来提高性能

  11. GridQ以表格形式昄和编辑数据的UI构g。一般分_(d)标题栏)(j)、表w(数据列表Q和表尾Q合计、状态显C等Q三个部分。其中,表头可以是复合的表头Q而表w可以是复合的格式(Tree?/span>Grid?/span>ComboBox?/span>CheckBox{)(j)。一?/span>Grid可以有一个复杂的Grid定义

  12. Enhanced GridQ下面简UCؓ(f)EGridQ是Grid的扩展。在Grid的功能基之上提供?jin)数据获取和数据持久化的能力Q可以大大的减少开发应用的旉Q?/span>Ext中的Grid可以认ؓ(f)是一?/span>化了(jin)的EGridQ?/span>

  13. CodeListQ代码表Q一般用在下拉列表数据处Q在pȝ的实CQ由于性能以及(qing)标准的要求,下拉列表一般都是采用代码保存数据,但是用户在填写表单的时候需要看到正常的文字而不是代码,q就需要系l通过CodeListq行文字和代码的转换

  14. LRUQ?/span>Least Recent Used的羃写,是一U简单的~存{略Q如果缓存已满,那么释放最q最用的那个~存数据

  15. RESTQ是REpresentational State Transfer的羃写,是一U基?/span>轻量U?/span>WebService协议

  16. JDBCQ是Java DataBase Connectivity对羃写,是基于Java的数据库q接规范?/span>

三、基

既然军_采用AjaxQ就最好采用一个基Q在q个有很多优U的Ajax框架可供选择的时代,谁要是还要赤手空拳的来写Ajax应用Q就未免有点儿过于勇敢,而近于鲁莽了(jin)。这文章不是Ajax框架Ҏ(gu)文章Q我不打在q里一一列D各个行的Ajax框架的优~点Q我只拿下面几个q行讨论Qdojo、Prototype、jQuery、Ext?br />
先提需求,框架应该Q?br />
  1. 以一UŞ式支持面向对象(毕竟开发h员多数都是JavaE序员,更有可能的是Q他/她只对Java熟?zhn)Q?/li>
  2. 以一U方式来支持命名I间和分包机Ӟ开发企业应用与开发网站不同,复杂的不是技术而是业务。没有命名空间和分包支持Q对于大型应用,基本不可控制。──设想一下如果Java没有package关键字会(x)怎样Q?/li>
  3. 有完善的模块装与管理规范或者最?jng)_践,能够自动处理模块间的依赖则更好(模块的定义不在这里解释了(jin)Q一个例子说明吧Q一个Jar是一个模块。模块化和构件化是实现、维护和理大型应用的重要手D)(j)
  4. 提供丰富的调优选项Q得对复杂的应用调优是可能的(q一点对于UI层尤为重要,因ؓ(f)它直接面对用者)(j)
  5. 便于调试Q这一点对于开发者致关重要)(j)

l合上面几点Q我选择dojo作ؓ(f)基础。Sorry Prototype?br />

四、整体构?/h1>
整体构架如下图所C(Z(jin)便于理解UI构g与其对关p,我把需要数据处理的UI构g也加?jin)上去,图中蓝背景色的部分就是?j)Q?br />



一目了(jin)?dng)整个客户端数据处理?个部分构成,DataSource、DataSet和DataStore。下面分别进行简单的介绍?br />

五、DataSet

DataSet的概念很单,是数据对象的集合。它的构架如下图所C(注意QDataSet只是一套标准的APIQ可以有不同的实现——比如XML形式的)(j)Q?br />

如图所C,DataSet由四个部分构成,Record SetQ数据集合)(j)、Change TrackerQ数据变更追t)(j)、Meta DataQ数据对象源信息Q和CursorsQ游标APIQ?br />
分别介绍如下Q?br />
  1. Record SetQRecord Set是Record的集合,一个Record是一个数据对象,它由一pd的属性(PropertyQ构成,属性是一个简单的字符Ԍ其对应的值可以是Lcd。Record提供属性读写的Ҏ(gu)Q可以直接在Record上对属性进行读写,q且QRecord?x)?f)写操作提供一个事件。Record Set内部的元素必LRecordQRecord Set支持对内部Record的CRUD操作。ƈ且会(x)有相应的事g触发
  2. Change TrackerQChangeTracker为DataSet提供所有写操作的追t,可以通过配置选择Change Tracker是否记录修改Q如果记录修改,采用的是针对每一个Record记录增加、删除以?qing)针?gu)一个属性记录First和Last修改的策?/li>
  3. Meta DataQ提供DataSet中Record的元数据Q属性名、属性对应类型、其他自定义数据——校验、Form Label信息、表头信息等Q以?qing)DataSet的元数据Q在全部数据中的位置{)(j)?/li>
  4. CursorsQCursor其实是Record的P代器Q可以通过对dataset查询Q一般都是非常简单的filter或者rangeQ得刎ͼ推荐通过Cursorq行Record讉KQ而不是通过IndexQ因为通过q代器访问RecordQDataSet拥有更多的能力。虽焉过Cursor完全可以讉K所有的Record?qing)其中的数据Q但是由于DataSet拥有MetaDataQ所以还是采用DataSet作ؓ(f)数据l定的主?/li>

DataSet是整个客L(fng)数据处理构架的核?j),所有的数据讉K都应该通过DataSet的API。这样客L(fng)的数据处理才是统一的一个整体?br />
解决的用例问题:(x)
  • 数据l定QForml定、Gridl定
  • 数据变更q踪QGrid变更提示、数据集合变更追t、Form修改的追t?/li>
  • 数据讉KQ数据对象元数据信息讉K、数据写操作的统一事g定义、统一的数据读取方?/li>

六、DataSource

DataSource的功能是提供Ҏ(gu)据进行查询以?qing)数据的持久化(持久化到客户端或者服务器端)(j)。与DataSet一P不同的格式数据就?x)有不同的DataSourceQ一UDataSource代表?jin)一U客L(fng)与服务端的数据传输协议。但是由于DataSource的逻辑与结构过于复杂(事实上,DataSet的实C完全依赖DataSource的实玎ͼ可以cLJDBCQ,不应该对每一U格式都重新实现一个DataSourceQ由此,DataSource不应该是一套标准的APIQ而是使用?jin)Adapter模式Q来满不同的数据来源,其构架如下图所C:(x)
看上d单?实际上这是最复杂的部分,关于q个部分Q至可以再?文章来详细探讨Q在本文中,׃q度讨论?jin)?)

如图所C,DataSource由Cache、Query、Persist以及(qing)Providers构成Q分别介l如下:(x)
  1. CacheQCache的概念在前面已经阐述?jin),不在q里多说?jin)。在q里单的介绍一下客L(fng)Cache的策略以?qing)技术,׃Z览器的数据~存技术非帔R要,拟在后箋的文《客L(fng)的缓存策略与相关技术》中对其q行详细讨论
    • ~存{略Q这一斚w客户端数据的~存与服务端的数据缓存考虑的问题应该是cM的,唯一的区别是Q客L(fng)的数据缓存不必考虑集群支持?)Q?/li>
      • LRUQ基的Cache法Q如果缓存已满时Q根据最q很用算法来定哪些对象需要被清除
      • PriorityQ按照优先高低来清理缓存空间的{略Q当~存已满Ӟ按照优先U高低来定哪些对象需要被清除Q可以与LRU法共存
      • RefreshableQ有时效性的数据Q或者在q行时有可能?x)被修改需要同步或者刷新的数据。可以设|数据过期时_(d)到时间则数据处于stale状态,再度讉K该数据时Q如果不能重新获得该数据Q则报错
      • ExpireableQ(f)时性数据,可以讄失效旉Q到旉则数据失效,在缓存需要清理时Q缓存会(x)清理掉这些失效的对象
    • ~存持久化(属于高的缓存策略,依赖客户端基于JavaScript的数据存储技术)(j)
      • SaveQ持久化Q:(x)把缓存当中的数据持久化到本地或者服务端Q其用处如下
        • 通过把数据持久化可以增加Cache的容?/li>
        • 数据本地~存提供?jin)离U表单填写的能力
      • Retrieve、DeleteQ对~存中数据的基本操作
      • SyncQ离U缓存的本地数据Q可以与q程服务端进行同步,从而实现离U表单提交以?qing)实现离UCodeList{功?/li>
    • ~存技?/li>
      • Client
        • 内存引用
        • Cookie
        • Google Gear
      • ServerQ服务端协助客户端做一些缓存,q在传统的B/S下是匪夷所思的设计Q在RIA的情况下却未不是一U手D)(j)
        • WebService或者REST
        • Post + Get
  2. QueryQ其实Query只是一个方法,׃有可能会(x)向服务端发XmlHttpRequestQ所以这个方法需要回调方法。其参数应该是一个Query对象Q一个配|对象,有一些事件的关键字(onBegin、onError、onSuccess{)(j)。Query对象以及(qing)配置对象的格式在本文中就不详l说明了(jin)Q留l以后慢慢说Q因个部分是我最喜欢的部分)(j)。很明显Q如果查询成功,查询的结果应该是DataSetQ一般来_(d)DataSource是DataSet来源。不同的DataSourceQ查询的语言未必相同。不一定所有的查询对象都支持SQL语法Q比如可以支持HQL或者XQuery啊)(j)Q而且我最推荐采用的是服务端提供一个服务抽象层Q接受Json格式的查询请求,q返回Json格式的数?/li>
  3. PersistQ数据持久化。只是Save和Update两个Ҏ(gu)。接受DataSet和配|对象作为参敎ͼq两个方法也应该是异步的Q。如果DataSet里面没有_的元数据信息Q需要在配置对象里面提供q些信息。这个部分不比Query部分复杂
  4. ProvidersQ数据的来源Q提供了(jin)Query和Persist API的实玎ͼ是DataSource的底层实玎ͼ它DataSource的实现可以跨不同协议而用。给DataSource提供不同的ProviderQDataSource可以支持不同的数据传输协议?/li>

DataSource是数据查询和持久化的核心(j)Q所有的客户端的数据查询和持久化基本都应该采用DataSourceQ从而获得DataSource提供的强大而灵zȝҎ(gu)?br />
解决的用例问题:(x)
  • 数据~存Q离U运行的CodeList、离U表单填写、性能考虑
  • 数据查询Q样本查询、模p查询、Range查询、逻辑查询、自定义查询
  • 数据处理Q数据处理事件、过滤、排?/li>

七、DataStore

DataStoreZDataSource和DataSet的实玎ͼ实现?jin)dojo的data api。这h实现?jin)对需要dojo api的dojo构g的支持,又满了(jin)cMTree、EGridq种既需要绑定又需要数据来源的高构g的要求。M来说QDataStore只是薄薄的一层接口,实际的实现完全依赖于DataSource?br />
解决的用例问题:(x)
  • 数据l定、查询、处理:(x)Treel定、ComboBox数据源、EGridl定

八、待讨论的问?/h1> 客户端的数据处理事实上要比我惌得还要复杂,我还有一些设计决{没有确定,列D下来以供讨论吧?br />

8.1 客户端的事务处理Q?/h2> ׃很多数据处理都放在了(jin)客户端。客L(fng)的数据处理操作相应增多而且复杂Q是否应该在DataSource中添加写事务的处理?以便Ҏ(gu)据操作进行更l粒度的理Q而不是仅仅停留在Query、Save和Track阶段Q?br />

8.2 权限数据的来?/h2> 如果可以q接到服务端Q用户在向服务端d后,服务端会(x)q回用户的权限信息列表。客L(fng)接收后,可以相应的提供权限控制。但是,如果客户端离U运行,用户无法向服务的dQ权限信息列表无从获得,怎么提供权限控制Q?br />
探讨Ҏ(gu)1Q离U客L(fng)无须dQ由于没有权限控制列表,默认拥有pȝ最低权限(固定的配|在客户端)(j)Q由pȝ开发h员决定用户在ȝ时可以进行何U操作。用户在U提交数据的时候,服务端也要根据相应的权限q行验证以防止越权的数据操作

探讨Ҏ(gu)2Q离U客L(fng)仍须dQ权限控制列表用用户在U登录时~存的数据。其余与在线方式相同。如果用h有在U登录过Q那么离U应用无法用?br />

8.3 跨域数据的来?/h2> ׃览器的安全性策略,JavaScript无法向除本n域之外的其他服务器发送请求。也是_(d)对于JavaScript而言Q所有的数据必须来源于同一个域的服务器。对客户端进行集成非怸利?br />
探讨Ҏ(gu)1Q服务端提供一个服务接入层Q接受如Spring Bean、EJB、JMS、WebService{Ş式的服务Qƈ且把所有的服务都{化成ZU固定格式的协议与客L(fng)交互。所有的服务集成与协议{化都交给服务端,对客L(fng)完全透明?br />
探讨Ҏ(gu)2Q服务端提供一个简单的ProxyQ通过一定的协议把请求和回复转发l客L(fng)Q处理交l客L(fng)来做

?ji)、小l?/h1> 虽然C(jin)q里Q但是对于基于JavaScript的RIA客户端数据处理的讨论却才刚刚开始,q需要很多后l的展开讨论。但是,上午已经q去?jin),需要去吃午饭了(jin)?)



guitarpoet 2007-12-15 13:15 发表评论
]]>关于ZJavaSript的RIA客户端数据处理(上)(j)http://m.tkk7.com/guitarpoet/archive/2007/12/08/javascript_ria_data_processing_1.htmlguitarpoetguitarpoetSat, 08 Dec 2007 02:31:00 GMThttp://m.tkk7.com/guitarpoet/archive/2007/12/08/javascript_ria_data_processing_1.htmlhttp://m.tkk7.com/guitarpoet/comments/166221.htmlhttp://m.tkk7.com/guitarpoet/archive/2007/12/08/javascript_ria_data_processing_1.html#Feedback2http://m.tkk7.com/guitarpoet/comments/commentRss/166221.htmlhttp://m.tkk7.com/guitarpoet/services/trackbacks/166221.html

一、引?/h1>

q个blog已经荒废近一q了(jin)Q久也不写,自然有很多的理由Q但更多的怕是懒吧。不说闲话了(jin)Q{入正题?/p>


关于ZJavaScript的RIA客户端数据处理这个话题,我打分成两文章来写,一陈q我所ȝ出的ZB/Sl构的RIA客户端数据处理的问题Q另一则陈述针对q些问题我所提出的技术解x案构架?/p>


二、RIAQRIAQ?/h1>

关于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>


三、定义、羃略语

下面是本文中使用的技术名词的定义以及(qing)~略语简介?br />
  1. RIAQ?/span>Rich Internet Application的羃写?/span>RIA是拥有传l本地应用的功能和效果的Web应用?/span>RIA一般把UI相关的处理交l了(jin)Web客户端,但是大量的数据(包括应用的状态、数据等Q还是交l服务端处理

  2. AjaxQ又写ؓ(f)AJAXQ是"Asynchronous JavaScript and XML"的羃写。是一U用浏览器技术进?/span>RIA开发的技?/span>

  3. ECMA ScriptQ由European Computer Manufacturers AssociationQ欧z计机刉商协会(x)Q维护的一个脚本语a标准。当前最通行的版本是ECMA-262 Edition 3Q通常也被UCؓ(f)JavaScript 1.5

  4. dojoQ由dojo foundation理的一个开?/span>JavaScript框架。提供了(jin)很好?/span>JavaScript扩展Q目前被IBM?/span>Sun{大公司支持和?/span>

  5. JsonQ? JavaScript Object Notation的羃写。它是一U纯文本的数据对象传输协议,?/span>Ajax的应用中被广泛采?/span>

  6. CRUDQ?/span>CreateQ创建)(j)?/span>RetrieveQ获取)(j)?/span>UpdateQ更斎ͼ(j)?/span>DeleteQ删除)(j)q四U简单的数据操作的羃?/span>

  7. FormQ本文中?/span>Form指的是经q?/span>Ajax扩展的简单的HTML?sh)子表单。表单内部可以拥有很多如ComboBox?/span>TextBox{构件。一般来_(d)一个表单对应着一个业务的数据对象

  8. TreeQ树(wi)形显C结构化数据的构Ӟ׃数据是高度结构化的,往往可以采用懒加载等技术来提高性能

  9. GridQ以表格形式昄和编辑数据的UI构g。一般分_(d)标题栏)(j)、表w(数据列表Q和表尾Q合计、状态显C等Q三个部分。其中,表头可以是复合的表头Q而表w可以是复合的格式(Tree?/span>Grid?/span>ComboBox?/span>CheckBox{)(j)。一?/span>Grid可以有一个复杂的Grid定义

  10. Enhanced GridQ下面简UCؓ(f)EGridQ是Grid的扩展。在Grid的功能基之上提供?jin)数据获取和数据持久化的能力Q可以大大的减少开发应用的旉Q?/span>Ext中的Grid可以认ؓ(f)是一?/span>化了(jin)的EGridQ?/span>

  11. CodeListQ代码表Q一般用在下拉列表数据处Q在pȝ的实CQ由于性能以及(qing)标准的要求,下拉列表一般都是采用代码保存数据,但是用户在填写表单的时候需要看到正常的文字而不是代码,q就需要系l通过CodeListq行文字和代码的转换

  12. LRUQ?/span>Least Recent Used的羃写,是一U简单的~存{略Q如果缓存已满,那么释放最q最用的那个~存数据

  13. RESTQ是REpresentational State Transfer的羃写,是一U基?/span>轻量U?/span>WebService协议


四、客L(fng)数据处理的技术场?/h1> 在本部分里将?x)针对下面六个分cd客户端数据处理的技术场景进行概q?br />
  • 数据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>


4.1 数据l定Q?/span>Data BindingQ?/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>

 4.2 数据变更q踪Q?/span>Data Change TrackingQ?/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>

4.3 数据讉KQ?/span>Data AccessQ?/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>

4.4 数据~存Q?/span>Data CachingQ?/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)同步{略

4.5 数据查询Q?/span>Data QueryQ?/span>

概念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合

4.6 数据处理Q?/span>Data ProcessingQ?/span>

概念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>

五、小l?/h1> 客户端的数据处理能力是客L(fng)最主要的基能力Q它直接影响C(jin)应用服务器的负荷以及(qing)用户UI响应的速度和效率。所以,客户端的数据处理支持是一个RIAq_非常重要的考核炏V可以上面的六类场景去考核各种RIAq_Q同Ӟ它们也ؓ(f)我提出我的RIA客户端数据处理解x案提供了(jin)基础的用例?br />


guitarpoet 2007-12-08 10:31 发表评论
]]>新的展现层技术、架构与开发方?/title><link>http://m.tkk7.com/guitarpoet/archive/2006/04/19/41962.html</link><dc:creator>guitarpoet</dc:creator><author>guitarpoet</author><pubDate>Wed, 19 Apr 2006 09:21:00 GMT</pubDate><guid>http://m.tkk7.com/guitarpoet/archive/2006/04/19/41962.html</guid><wfw:comment>http://m.tkk7.com/guitarpoet/comments/41962.html</wfw:comment><comments>http://m.tkk7.com/guitarpoet/archive/2006/04/19/41962.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://m.tkk7.com/guitarpoet/comments/commentRss/41962.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/guitarpoet/services/trackbacks/41962.html</trackback:ping><description><![CDATA[     在这里只是简单的介绍一些企业应用开发应该采U_借鉴的一些展现层技术、架构和开发方式,之所以称它们为新Q主要是针对技术和势而言Q其实他们的概念已经不算是太新的?jin)(已经存在一D|间了(jin)Q,正是因ؓ(f)如此Q它们更加具有可借鉴的h(hun)倹{?br /><br />    <span style="font-weight: bold;">览器胖客户端技术:(x)<br /><br /></span>    无论如何说、无论采用何U技术目前的三层分布式企业应用也都是网l应用,它在本质上与其他的网l应用是有相似性的Q我们可以在它们之间作一个类比?br /><br />    在不远的以前,|站的用L(fng)面也是静(rn)态的Q虽然很多网站提供了(jin)服务端动态网늚支持Q但是用L(fng)到的却还是一张张?rn)态的|页。用户与|站之间是一个请? 和交互的q程Q本质上是q样Q看上去也是q样Q,用户通过链接在一个个动??rn)态的面之间览。而所有的处理全部是由服务器来q行的。大多数能够? 时响应客L(fng)是Flash或者Appletq种览器的插g。当然客L(fng)动态网늚技术当时也已经存在很长旉?jin),但是q没有得到太多的重视?br /><br />    但是Q近几年来,动态网|h技术逐渐兴vhQ它充分利用?jin)客L(fng)览器所具备的计能力,通过借助于DHTML容器的事件机制和非提交Ş式HTTP 讉K服务器的Ҏ(gu)实现?jin)可以在客户端自行处理用戯求的Z览器的胖客L(fng)Q得用界面更加友好和易用Q而且q在相当的程度上减轻?jin)服务器处理的? 担?br />    <br />    再拿二层的分布式企业U应用来作纵向比较,虽然抽象出应用服务器q一层对于数据库服务器是一U解脱(也ؓ(f)SOA打下?jin)基Q,但是׃当时的网l应用的技 术所限,真正的用户体验是下降?jin)的Q胖客户端的安装和升U确实比较麻?ch),但是一般说来客L(fng)的安装问题只是部|和l护企业U应用系l的一个很的问题。但 对于底层的实际用戯(g)言Q基于网lHTML技术的客户端界面可能会(x)好看一些,但是效率、操作性、实时反应的能力都是下降?jin)的。对于底层的用户而言Q键盘操 作要比鼠标操作工作效率更高。企业应用的系l是要给企业做的Q而企业的主要目标是创造最大利润,在这一点上其实很多三层的企业应用都是对企业应用所 要达成的目标的一U背R但是,q主要是因ؓ(f)当时的技术所限,q是最能代表当时网l技术的大型商业|站Q他们的用户界面也几乎全是静(rn)态的HTML|页?br />    <br />    lg所qͼ可以看出三层分布式的企业U应用系l应该在展现层进行一ơ革斎ͼ应该可能的采用览器胖客户端的技术,q样一斚w可以充分利用客户端的计算? 力和资源Q缓解服务端压力Q还可以通过快捷键、自定义快捷方式甚至自定义宏的方式提高用L(fng)使用效率和用体验?br /><br />    <span style="font-weight: bold;">服务端组件化开发技术:(x)<br /><br />    </span>Struts 是一个很好的框架Q它的灵zL和E_性是有目q的。但是无论如何它l开发h员带来的工作量和调试h的难度也是很多的Q尤其是在没有充分体现出分层概念 的企业应用pȝ中)(j)。其实难度最l是要{化到|络应用的开发上ȝ。三层的企业U应用系l也是网l应用,而对于网l应用而言Q业务开发h员和工Q又? WebUIQ)(j)人员的分工也是比较头疼的问题。JSP{模板技术于是应q而生Q但其实q不q是一U善意的谎言。对于JSP而言业务开发h员还是必d HTML有比较深的了(jin)解,而且最头疼的是Q除非你把它攑֜Web容器中运行,否则你决不会(x)知道它到底是一个什么样子(除非你把你自q大脑变成一个Web 容器加上一个浏览器Q,JSP Tag的出现ƈ不能解决什么问题,从本质上来说它就是JSP概念的一个g展,可以节省代码而已Q而且带来更多的复杂度Q?br /><br />    N真的没有办法?jin)吗Q?br /><br />    我们U向Ҏ(gu)一下二层的企业U应用,它开发和l护h没有三层那么麻?ch)。原因何在?lg已经装?jin)绝大多部分的工作,你所需要的只是应用lg、配|组件、添加事件处理代码而已?br /><br />    从这个方面上来说Q还有什么DHTML更好的用L(fng)面描q语aQ设想一下,你可以试图拿SwingQؓ(f)什么SwingQ——^台无养I(j)写一个可以在q行? 动态的改变界面l构、通过样式描述文g动态改变组件样式的E序Q这一切可以跟一个或多个很完善的脚本语言无缝集成Q,它会(x)多复杂?<br /><br />    q记得桌面应用的开发吗Q没有一个像L(fng)桌面E序没有自定义组件的Q但是它们的自定义组件大多数其实只是基础lg的组合?br /><br />    同理Q也可以对HTMLq行如此开发?br /><br />    下面l出解决的架构?br /><br />    <span style="font-weight: bold;">展现层开发架构:(x)<br /><br />     </span>开发要明确体现出客L(fng)、应用服务器端、数据库服务器端的三层概c(din)数据库服务端的开发与展现层无关略M讌Ӏ?br /><br /><ol><li>客户端开发:(x)使用JavaScriptq行事g处理响应用户的操作,对组件进行相应的操作Q如有必要可以采取远E服务器端服务调用(既可以调用自己服务器提供的服务也可以调用其他的公用网l服务,W合SOA的要求)(j)的方式?/li><li>? 务端开发:(x)展现层组件分Z部分Q动态网늻件和JavaScriptlg。动态网늻仉用基于组件化的动态网|Ӟ比如TapesrtyQؓ(f)什么不 用JSFE后再讲Q。另外服务端开发还有业务逻辑处理服务Q其中业务逻辑处理属于业务逻辑层不再多_(d)而业务逻辑处理服务和服务的q程调用以及(qing)相应的安? 处理可以采用Spring + Acegi + DWR的方式(q样可以既可以实现JavaScript客户端远E调用业务逻辑服务Q还可以很容易的实现服务的安全公开化,W合SOA的要求)(j)?/li></ol><br />    Z么这么看重Tapestry而不用JSF呢?<br /><ol><li>JSF 的标准还是跟JSPl在一块的Q虽然有Facelet的存在,但是本n摆脱不了(jin)JSP的JSFq是?x)被JSP所拖篏的。我q没有说JSP一无是处,作ؓ(f)? 板技术而言QJSP已经非常成功?jin),但是对于JavaScript胖客L(fng)开发而言QJSP本n容器相关的特性实在是没什么好处?/li><li>目前 而言JavaScript是可以进行单元测试的Q而Tapestry的Html模板技术得JavaScript和Html的集成测试达到可能。你可以? 全不Tapestry而调试JavaScriptQ调试成功以后再加上Tapestry的组件标{ְ可以?jin)。你可以为重要的JavaScriptQ一? L(fng)l作用的Script没有必要测试了(jin)Q写试脚本q行试Q而这些全部都是远Web容器的?/li></ol>    <br />    我们的开发h员ؓ(f)什么要q离JavaScript呢?因ؓ(f)它是动态解释语aQRuby也是。只要测试到位,动态语a也可以实现稳定的pȝ?br /><br />    q行的效率低Q也许吧Q但总高q整个页面刷斎ͼ我说的不q分吧?br /><br />    开发h员对JavaScript认识不够Q没有很好的IDE支持Q事实上Q根本不必让开发h员对它认识“够”,因ؓ(f)他所写的主要是一些GlueCodeQ? 配置一下组Ӟ把组件之间通过事gl合h。当?dng)q些有一部分你可以自己发明一些XML来达刎ͼ值得吗?我个为写动态脚本也好过写XMLQ别跟我? 你还可以写个DTDQ。至于IDE的话Q我认ؓ(f)Q写JavaScriptҎ(gu)用不着Q尤其是在你Ҏ(gu)不会(x)写很多的时候。只要有一个浏览器和浏览器支持? JavaScript调试器够了(jin)。只要组件化做好?jin),再结合工E模板,那么开发h员就象回C(jin)二层的时代,选择相应的组Ӟl合然后是调试?jin)。比两层 有优势的一Ҏ(gu)Q他不必启动服务器就可以调试客户端?br /><br />    q一斚w的网l应用开发先驱是GoogleQ可惜,他们没用JavaEE技术,呵呵Q,到现在已l成ZU风潮,对企业应用开发赶旉是没有必要的Q但 是技术的发展带来?jin)新的可能,不管是在开发方面还是在客户体验和客h率提高上都会(x)有更好的Z(x)Qؓ(f)什么不把握q个Z(x)呢?<br /><br />    末了(jin)QSOA完全可以评ؓ(f)今年的Y件开发最行关键词。呵c(din)它的核?j)概忉|什么呢Q不要浪费现有的IT资源?br /><br />    我们现在对于|络和计机技术的资源开发和应用的大部分都处于浪费状态,有政d因、有商业原因但是q有技术原因。能够尽可能有效的利用手中现有的资源Q对于企业的发展也有相当的积极作用?br /><img src ="http://m.tkk7.com/guitarpoet/aggbug/41962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/guitarpoet/" target="_blank">guitarpoet</a> 2006-04-19 17:21 <a href="http://m.tkk7.com/guitarpoet/archive/2006/04/19/41962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://b2bautoparts.com" target="_blank">޷A߷</a>| <a href="http://26uuyy.com" target="_blank">ѹۿŮƵ</a>| <a href="http://gtja1668.com" target="_blank">ձһaƵѹۿ</a>| <a href="http://wlamyx.com" target="_blank">һƵ</a>| <a href="http://chowngroup.com" target="_blank">˳</a>| <a href="http://www-554949.com" target="_blank">йxxxxx69Ƶ</a>| <a href="http://xjywater.com" target="_blank">ɫվWWWĻ </a>| <a href="http://gttest5.com" target="_blank">޴ɫAvר</a>| <a href="http://mallmirror.com" target="_blank">aëƬ</a>| <a href="http://hivzx.com" target="_blank">þ99ƷƵ</a>| <a href="http://179228.com" target="_blank">޹Ʒ˾Ʒ</a>| <a href="http://heifengmi.com" target="_blank">fc2ѹƵվ</a>| <a href="http://am3736.com" target="_blank">ۺϾþۺϼþ</a>| <a href="http://aidannis.com" target="_blank">ձػɫaaƬ</a>| <a href="http://xuexilo.com" target="_blank">ҹAëƬƵ </a>| <a href="http://haoda8.com" target="_blank">߿Ƭ</a>| <a href="http://yx6768.com" target="_blank">xxxxձ߲Ѳ</a>| <a href="http://wwwwmmmm.com" target="_blank">AVһ</a>| <a href="http://xjdz8.com" target="_blank">һ</a>| <a href="http://qzllw.com" target="_blank">һˮëƬѿ</a>| <a href="http://jj5c.com" target="_blank">ŮͬavƬ߹ۿ</a>| <a href="http://zdmaid.com" target="_blank">һ</a>| <a href="http://zzdyzj.com" target="_blank">avƬ߹ۿ</a>| <a href="http://zjj100.com" target="_blank">޾Ʒþþþþ</a>| <a href="http://51xinshiji.com" target="_blank">91avƵ߹ۿ</a>| <a href="http://zuche001.com" target="_blank">Ůһ</a>| <a href="http://delvheng.com" target="_blank">޾Ʒ·һ߹ۿ</a>| <a href="http://as5566.com" target="_blank">hƵ߹ۿ</a>| <a href="http://992fanli.com" target="_blank">վavƬ</a>| <a href="http://czxgjt.com" target="_blank">һëƬƬƵֻ </a>| <a href="http://4p5e.com" target="_blank">޾AA߹ۿSEE</a>| <a href="http://www99xyxy.com" target="_blank">˿Ƶ2019</a>| <a href="http://0101av.com" target="_blank">99߹߲ѹۿ</a>| <a href="http://6363388.com" target="_blank">޾Ʒ߲</a>| <a href="http://246210.com" target="_blank">Ļ޵Ӱ</a>| <a href="http://bearsou.com" target="_blank">պƵһ</a>| <a href="http://788qj.com" target="_blank">һƵ߹ۿİ</a>| <a href="http://dstbxg.com" target="_blank">Ʒѿþþ</a>| <a href="http://schygfz.com" target="_blank">ɫ˵</a>| <a href="http://038037.com" target="_blank">þ޴ɫĻþþ</a>| <a href="http://laxdz.com" target="_blank">ɫһ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>