ExtJS 设计模式 之一 :单例(singleton)
ExtJS 设计模式 之一 (单例)
Extjs 发展至今,传承了YUI的伟大精髓, YUI得到了Douglas Crockford(任职于 Yahoo! 的一名 JavaScript 传道者和架构师,他是全球最有造诣的 JavaScript 语言专家之一,Blog:http://www.crockford.com/) 大师的赞同,而ExtJS也是将YUI的模式脚本编程学习使用的淋漓尽致,并且还给它做了几套华丽的CSS嫁衣...., 而在ExtJS越发耀眼的同时,我等初学者在使用ExtJs的时候也是晕呼其呼。(好在2.0 推出之后,官方的文档,像雨后春笋一样,开始覆盖到方方面面。)
其实,拨开ExtJS华丽的外衣,翻阅其体内精致的代码,不难发现一些我们耳熟能详的设计模式。
在早期1.0,1.1的好多例子中,我们会看到这样风格的代码。
var Oo= function(){
var x;
var y;
return{
a:function(){
...
},
b:function(){
...
}
}
}();
咂一看,不是我们能理解的方式, function(){}(), 是何意?。
//()在这里,意味着方法已经执行,并且return里面的已经产生, 这样可能很难理解,那等同与执行 function oo(){},这样是否好理解些了?
BTW :这里要引入JavaScript的一个高级概念,“闭包”。(具体内容参考《JavaScript The Definitve Guid,5th Eddion》Section 8.8 --Function Scope and Closures ,也是被Douglas Crockford推荐的为数不多的两本书籍之一。), 当然不急着去翻,先把我的废话看完。
好了,看这种使用别扭的使用方式, 而这种方式,在我们的页面,或者其他类中, 调用Oo的a方法的时候,形式如下
Ext.onReady(Oo.a); 对,正是这样的一种JS编程方式,被Douglas Crockford作为JS的一种单例的实现, 大师还把它叫做“Module Pattern”,
好,如果我们不用所谓单例呢?, 就看看传统的对象方式,同学们肯定在Pototype盛行的时代,已经弄的一清二楚。
0o = function(){
this.x;
this.y;
}
Oo.prototype = {
a:function(){
this.x = 100;
},
b:function(){
this.y = 200;
}
}
//调用方式
Ext.onReady(function(){
var o = new Oo();
0.a();
});
再来,假使是个初学者,不知道对象继承,怎么办。更土的写法,人人都会。
var x,y
function a(){
x=100;
}
function b(){
y=200;
}
调用方式。
不用说了,只要a(),就会把x设置, 全世界的开发者都公认 ,全局变量是邪恶的,,而且随着你调用的不注意,将会越来越臃肿,导致Memory Lacks 内存泄露。
以上几个简单的举例可以看出, 类 比Java 一样, Oo.a直接调用,好比一个静态类,直接访问。 而prototype需要创建对象后访问其成员。
第一种方式,在任何地方都不需要创建(只创建一次),
而第二种方式,需要在每次调用的时候,创建对象。
第三种老土的代码,希望大家尽量少写,这不是程序员风格的体现。
对于发展到今天,如此庞大的ExtJS2.0,自然也要考虑道自己的运行和调用不要让new 变得太臃肿,在ExtJS中我们发现, 在会被各个组件大量频繁调用到的一些工具类中,单例运用较为频繁。
Ext 源码中,设计使用单利的代码片段。
//source/core/DomHelper.js
Ext.DomHelper= function() {
//private attributes
..
return{
}
}();
//source/core/DomQuery.js
Ext.DomQuery =fucntion(){
}();
后记: 由于JavaScript,具有prototype,call,apply来实现继承,面向对象来开发,又有闭包等特性来进行函数编程。有函数编程和面向对象的双重性质, 使得JavaScript格外的灵活,难以驽驾, 开发者选择多种风格来进行编码,在一个整体项目会容易会走向凌乱和灭亡。 这就更需要我们从大师的经验总结,以及ExtJS这种优秀的设计中,去体味学习,站在巨人的肩膀上前进.....
(另外值得一提出的,ExtJs必须要求你的页面为XHTML,当你在别的浏览器下跑的非常顺畅,而唯独IE下有那么点瑕疵(不是脚本报错的),你应当检查下你是否把你的页面定义成XHTML.)。
盼到了IBM Rational V7
工作中RSA6使用的功能挖掘的差不多的时候,一直遗憾其不支持 JDK5,导致这么个利器,就工作的时候霸占着整个资源。 玩些开源还要另开Eclipse3.2x,可怜的内存。
IBM 12月发布了V7,却一直没0Day到,今天终于电驴到了。小驴跑的真欢畅。
关注一下:
http://www.ibm.com/developerworks/cn/rational/sdpv7/
不管Ajax是否是明日黄花,历史会见证这一刻。
由 Ajax In Action 一书收集提供的ajax 库,将它们搬了上来。
尽管这些信息已经算是比较老的,但是Ajax库的积累和开发并非一蹴而就,需要一个时段的沉淀和积累。
如下: 其中有我们非常熟悉的 DWR,Dojo,Prototype,ScriptAculous,Qooxdoo,RubyOnRails(主要集成了Prototype和Scriptaculous) 都依然在活跃着不断更新和迈进。
Accesskey Underlining Library 开源
www.gerv.net/software/aul/
ActiveWidgets 商业产品,可免费下载
www.activewidgets.com
Ajax JavaServer Faces Framework 开源 (Apache GPL)
http://smirnov.org.ru/en/ajax-jsf.html
Ajax JSP Tag Library 开源
http://ajaxtags.sourceforge.net/
Ajax.NET (2005)未说明学科,可免费使用
http://weblogs.asp.net/mschwarz/
AjaxAC 开源产品 Apache2.0
http://ajax.zervaas.com.au
AjaxAspects 免费使用有原码
http://ajaxaspects.blogspot.com
Michael Mahemoff (2005) 开源 产品
http://ajaxify.com/run/testAjaxCaller
AjaxFaces 开源产品 Apache
http://myfaces.apache.org/
BackBase 商业产品,有免费的社区版
http://www.backbase.com
Behaviour 开源产品
www.ripcord.co.nz/behaviour/
Bindows 商业产品
www.bindows.net
BlueShoes 商业产品,有免费版本
www.blueshoes.org
CakePHP 开源产品
http://cakephp.org/
CL-Ajax Richard Newman (2005) 开源产品
http://cliki.net/cl-ajax
ComfortASP.NET 预发布商业软件,有免费版本
www.daniel-zeiss.de/ComfortASP/
Coolest DHTML Calendar 开源产品,有商业支持
www.dynarch.com/projects/calendar/
CPAINT (跨平台的可异步方式通讯的工具包) GPL许可
http://cpaint.sourceforge.net
Dojo Alex Russell(2004) 开源产品
http://dojotoolkit.org
DWR (直接远程调用 ) 开源产品 Apache许可
www.getahead.ltd.uk/dwr
Echo 2 开源产品(MPL或者GPL许可)
www.nextapp.com/products/echo2
f(m) 开源产品
http://fm.dept-z.com/
FCKEditor 开源产品
www.fckeditor.net
Flash JavaScript Integration Kit 开源产品
www.osflash.org/doku.php?id=flashjs
Google AjaxSLT 开源产品(BSD许可)
http://goog-ajaxslt.sourceforge.net
Guise 商业产品,可免费下载
www.javaguise.com
HTMLHttpRequest Angus Turnbull (2005) 开源产品
www.twinhelix.com/JavaScript/htmlhttprequest/
Interactive Website Framework 开源产品
http://sourceforge.net/projects/iwf/
Jackbe 商业产品
www.jackbe.com/solutions/development.html
JPSpan 开源产品 PHP许可
http://jpspan.sourceforge.net/wiki/doku.php
jsolait LGPL许可
http://jsolait.net
JSON 开源产品,大部分实现使用LGPL许可
www.json-rpc.org/
JSRS (JavaScript Remote Scripting) 开源产品
www.ashleyit.com/rs/jsrs/test.htm
LibXMLHttpRequest Stephen W. Coate (2003) 源码可下载,有版权保护
www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXml-Request.html
Mochikit 开源产品(MIT许可)
www.mochikit.com/
netWindows 开源产品
www.netwindows.org
Oddpost 商业产品
www.oddpost.com
OpenRico Bill Scott, Darren James (2005) 开源产品
http://openrico.org
Pragmatic Objects 开源产品
http://pragmaticobjects.com/products.html
Prototype Sam Stephenson (2004)开源产品
http://prototype.conio.net/
Qooxdoo 开源产品 LGPL许可
http://qooxdoo.sourceforge.net
RSLite Brent Ashley (pre-2000)
www.ashleyit.com/rs/main.htm
Ruby on Rails David Heinemeier Hansson (2004) 开源产品(MIT许可)
www.rubyonrails.org
Sack 开源产品(修改过的MIT/X11许可)
http://twilightuniverse.com/2005/05/sack-of-ajax
SAJAX 开源产品
www.modernmethod.com/sajax
Sarissa 开源产品
http://sarissa.sf.net
Scriptaculous Thomas Fuchs (2004) 开源产品
http://script.aculo.us
SWATO… 开源产品Apache许可
http://swato.dev.java.net
Tibet 商业软件
www.technicalpursuit.com
TinyMCE 开源产品有一定的商业支持和专有插件
http://tinymce.moxiecode.com/
TrimPath Templates 开源产品
http://trimpath.com/project/wiki/JavaScriptTemplates
Walter Zorn’s DHTML Libraries 开源产品
www.walterzorn.com/index.htm
WebORB for .NET 商业产品有免费版本
www.themidnightcoders.com/weborb/aboutWeborb.htm
WebORB for Java 商业产品,有免费版本
www.themidnightcoders.com/weborb/aboutWeborb.htm
x Mike Foster (2005) 开源产品
www.cross-browser.com
XAJAX J. Max Wilson (2005) 开源产品
http://xajax.sf.net
x-Desktop 开源产品,GPL许可
www.x-desktop.org/
XHConn Brad Fults (2005)
http://xkr.us/code/JavaScript/XHConn
当一切成为主流,一切就将意味着淘汰。
在一大堆生活琐事中很快的消磨到了06年年底,30就快来临,却发现还有很多事要办,难免让人觉得有点无为。。。 生活的确占了生命中很大的意义,但是,工作和你的职业生涯如果没有半点成就,也会让人觉得人生索然无味。
不过,一切的顺意都要靠自己的努力去争取。
06年,Spring和Ajax占尽了风头,一切由Spring所支持的项目,在这个年度,迅速走红。 一切已经走红的项目,被Spring支持了也越来越红。而Ajax让客户体验发挥到了极致,也让人逐渐了解到了那些破费心血的Compents,Framework....诸如Dojo,Dwr,Rico,Prototype,Scriptaculous,而,在人们面前凉了很久(10年 - 97年诞生的1.1版本)的Javascript也被空前的掀起一股深入学习的热潮。
然而历史的每次推动,都是以新老事物的替换来做标记的
。当我们在热衷这些迅速走红的事物中组建体味到软件开发的优雅事,很多我们以前执着过的事物,开始让人忘淡。----
记得04,05年我们都纷纷谈论着设计模式,然而有人也渐渐在复杂的体系中自缚。 当我们谈论敏捷,谈论XP,谈论简化开发,谈论高效编程,谈论简单即美的时候, 开始不造轮子的时候,我的工作开始越来约追求简单,约来约注重高效。 我们的谈论我们的开发方式似乎有了些变化。
也许我现在还不能什么是主流,什么是淘汰。
前几天一个朋友很高兴的给我的讲诉,html可以走了,复杂的ajax可以不玩了,我似乎无法一下子接受这种刚成为主流的东西被遭到如此的评价。。。 接下去,我也渐渐开始尝试着Flex 做一些东西。,当我把简单的Compents托拽为一个应用时, 在体味.js和html在不同浏览器之间的支持要做那这个那个的处理时,,Flash 这种方式不觉已经开始在各种场合登场了。随着HttpService,WebService,DataSerice这些的很方便的支持,FLex无疑成了UI的一个有利工具,相比之下Ajax显得略微的复杂,稍微的逊色。于此同事M$也在推着他.NET2.0下的Expression, 顿时感觉,下一年将会笼罩着RIA的硝烟。。 直到前天,在孟岩和韩磊的博客上看到 "这一天终于来了",,于是,我跟着承认,有些东西是该退出历史舞台了。。
好友Leemaasn还保持联系,这位在我看来的技术天才很是乐观,他说的对,“只要我们的思想能能与时俱进,也就不用担心那么多了”,,我们的年龄的确会越来越老的,但是利用这些年的经验和积累,我们会更加知道我们需要什么。
业务领域成了软件开发的一根救命稻草,当技术我们更新不上的时候,当理论我们不够扎实的时候,我们能依靠这些年来的经验, 来去比知道做出的软件更多的功能,看到架构的不足和优点, 比将要使用的软件的客户知道的更多使用和需求,激发潜在需求。。。。
那,我们依然是主流。
XQuery快餐
近日,对XQuery 做了稍微的学习。
XQuery 是XMl查询语言, 目前版本为1.0
XML最大的两个特点,即定义了构化化的文本,可用于文档结构转换。进来用的较多的 XML-Object,XML->HTML XML->WML, XML->XML, XML-DATABASE,WSDL...
直接拿XQuery最流行的Query语言SQL来比较。
Xquery 相应的就是查询 结构化的XML的一种语言,同时也可对XML进行解释和转化。
SQL执行返回的是一串表结构化的数据,XQuery执行之后返回的是XML结构化的数据。所以有时候,我怎么看XQuery像存储过程。
XQuery可以用来做XML数据抽取(基于Xpath2.0,同XSLT2.0)
XQL片断:BTW:注释也有意思 (:--注释--:),左看右看都象个笑脸
for $doc in collection($docs)//booklist/book[contains(title,$title) and (year=$year)
XLST2.0 与 XQuery
XSLT与它也非常的相似。同样上面的查询,也有collection函数来实现遍历
一开始,误以为XQuery是XSLT的替代品,而事实上经查阅,XQuery和XSLT2.0规范是先后进行的,两者都是基于Xpath2.0, 应该各有各的用途。
总而言之,XQuery的的语法看起来更相SQL,更好阅读一点点。。而XSLT偏重于那种模板的风格。
因此,如果数据杂乱无章的话,用Xquery更好一点。非常适合,我们一大堆数据信息中数据的搜取和转换,应为这个合我们拿SQL取出数据来做DTO的开发习惯。
XQUERY的设计和应用。
现实中,XQuery也越来越成为一个重要而实用强大的语言。有IBM,Oracle,BEA的老大们照着,前途甚好,而SOA的产品中间层也都用XQUERY来做信息转化和缓存。
而新的数据库为了顺应SOA趋势,也加强了XML存取,新的数据库如 Oracle10G,Db29,SqlServer2005,还有MySql5等都也已经支持了Xquery.
由于XQuery 工作没用起草指导XQuery设计的正式原则表,所以对开发人原来讲,一切都要从Best pratice总结来。。也可以踩别人的肩膀。总结下来是。 组合性,闭包,模式一致性,XPath 兼容性,简单性,完整性,普遍性,简洁性,静态分析:(可参下考文献)
而我,继续期望能用一种更优雅的方式来编程 ,XML-XQuery- XMLBEAN 来遵照IBM,BEA的新定义SDO来做应用。
今后开始实践。
部分工具
开发工具:Stylus Studio 2006 (http://board.verycd.com/t356303.html)
解析器 Saxon (http://www.saxonica.com/)
参考文献留个底,
XQuery 简介
XQuery 与 SQL: 变化万岁!
使用 XML: XSLT 2.0 和 XQuery 对比
XQuery from the Experts: 影响 XQuery 设计的因素