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