公告栏里写到:Dojo的高门槛一旦跨过,必将别无所求。含义有二:第一,Dojo难学;第二,Dojo很强大。
这也揭示了本博客的目标:帮助大家用好Dojo这个优秀的Ajax框架。
在回答为什么选择Dojo之前,我们看看哪些人已经选择了Dojo:
既然能被众多著名IT公司支持,Dojo必然有它的独特之处,那就是:架构。
一个稳定、可扩展、可维护的架构是所有高质量应用的基石。如果所有人都按自己的思路随心所欲的写代码,那就不会有那么多软件方法学,设计模式的存在。Dojo在一定程度严格规定了这样的开发规则,这也是很多人难以上手的原因。
以典型的数据,逻辑,表现的三层架构为例,来看看Dojo中树(Tree)是如何设计的:
树形结构是各种开发最常用的一个组件,其本质是:一种数据表现视图,负责处理用户交互(逻辑)和内容展示(表现),不存储任何数据。Dojo中的树完全符合这样的本质,所有数据的存储和对数据的操作都是通过专门的DataStore来实现。
因此,当我们习惯性的想用Tree.addNode(text)这样的方法去增加一个节点时时,却发现方法不存在。而正确的做法是:通过DataStore来增加一条数据,Tree会自动的更新数据的变化到界面。修改删除节点也是同样的逻辑,甚至节点的按需载入(Lazy Load)也是DataStore的逻辑,而不是Tree的。这实现了数据层的分离。
同样,当我们习惯性的想给一个树节点的icon属性指定一个图片路径,来改变节点的图标,这在我们需要根据节点内容决定图标时很常用。但我们却会发现无法找到这样的API。正确的做法是派生一个新类,重写getIconClass方法去改变节点的CSS Class,再通过CSS来指定节点的图标。这实现了表现层的完全分离。
显然,这个Tree很难用。要创建一个树,我们首先得学会DataStore,熟悉它的API;还得知道如何从Dojo的Tree去派生新类来重写方法,这又要去了解整个Dojo的类的继承机制。很多人开始抱怨,Dojo真难用。但其实只要前进一步,就会海阔天空。
表面上看,这些架构和模式,增加了开发难度。而实际上,它却增加了代码的健壮性和可维护性。在这样一个实际开发代码只占整个项目时间10%的没有银弹的时代,架构才是提升整个软件质量的关键。良好的架构,可以大大降低整个项目的风险。而从Dojo中,我们能够潜移默化的学习到Ajax应用应该如何去设计。
很多时候,最好的选择就是自己最熟悉的工具。但如果恰好这个最熟悉的工具又是一个强大的工具,那将事半功倍。当你需要去开发一个长期的或者大量使用Ajax的应用,Dojo将是最好的选择。
从熟悉到习惯之后就会发现,Dojo的门槛其实并不高。
by Nate,2010-6-12
分享到:
相关推荐
struts2-dojo-plugin-2.3.4 jar 日期控件的jar包 需要的自行下载
struts2-dojo-plugin-2.2.1.jar, 直接导入到Struts2项目里即可,注意版本。
struts2-dojo-plugin-2.3.15.3.jar.zip
dojo-release-1.4.3.zip dojo-release-1.4.3.zip Qooxdoo
dojo-release-1.4.2-src.tar.gz
struts2-dojo 跨域时解决拒绝访问的问题
dojo-0.3.1-ajax
dojo-release-1.9.1-src
dojo-release-1.6.1-src.zip
dojo-release-1.12.2 开发包,搭建配置dojo,包含dojo开发时所需js文件
struts2-dojo-plugin-2.3.8
struts2-dojo-plugin-2.3.1.2.jar
Struts2的使用中出现的版本不符合或者缺少struts2-dojo-plugin-2.3.16的问题,大家可以下载使用。
struts2-dojo-plugin-2.1.0的jar包,可以再struts中使用dojo......
struts2-dojo-plugin-2.3.24日期控件9-12月乱码解决后jar包
它是在几个项目捐助基础上建立起来的(nWidgets,Burstlib,f(m)),这也是为什么叫它a"unified"toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些,长期存在、历史问题。historicalproblemswithDHTML跨浏览器...
dojo-release0.9 dojo-release1.0 dojo-release1.4
dojo 最新的稳定压缩版。版本号:1.10.4
struts2-dojo-plugin-2.1.6.jar 解决了datetimepicker显示月份乱码的问题,显示9、10、11、12月份时出现乱码,本包修改了该bug