ExtJS 设计模式 之一 :单例(singleton)

Posted by totodo on December 29th, 2007

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

Posted by admin on March 9th, 2007

工作中RSA6使用的功能挖掘的差不多的时候,一直遗憾其不支持 JDK5,导致这么个利器,就工作的时候霸占着整个资源。 玩些开源还要另开Eclipse3.2x,可怜的内存。

IBM 12月发布了V7,却一直没0Day到,今天终于电驴到了。小驴跑的真欢畅。

关注一下:

http://www.ibm.com/developerworks/cn/rational/sdpv7/

不管Ajax是否是明日黄花,历史会见证这一刻。

Posted by admin on November 26th, 2006

由 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

当一切成为主流,一切就将意味着淘汰。

Posted by admin on November 25th, 2006

在一大堆生活琐事中很快的消磨到了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快餐

Posted by admin on September 3rd, 2006

 近日,对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 设计的因素