第1章 简介
J-Framework(以下简称J框架)是一个Javascript开发框架,更确切的说是提供了一批类和函数库,能让Javascript编程更加简单、快捷。
目前它有四个已发布版本,以下是发布历史:
|
版本号
|
发布时间
|
简介
|
|
0.0.1
|
2007-01-20
|
第一个稳定版本
|
|
0.0.2
|
2007-02-10
|
修补了大量bug,增强了一些类的功能
|
|
0.1.0
|
2007-03-03
|
增强了功能,改造了类的书写习惯
|
|
0.4.0
|
2007-05-06
|
修改了架构,构造了新的层次关系
|
可以看出版本之间并非是连续的,这是因为J框架在每次发布时变动都比较大,但我们相信从0.4.0版本以后应该就比较稳定了。
1.1 为什么叫J-Framework
J框架在最初的设计阶段用一个名称为J的类放置大量公用的函数(其实是方法)。后来这个类变成了只有几个方法,但是因为我们学习了Java的设计方法,并模仿此设计方法设计了很多框架中的大部分类,所以J框架这个名称还是保留下来,意为“类似于Java的Javascript框架”。如果想知道具体模仿了哪些设计方法,需要看接下来的内容,最重要的是第2章。
1.2 为什么使用J框架
1,它具有兼容性
目前兼容当前最流行的IE(5.5版本以上,包括使用其作为内核的MyIE等)和Firefox1.2以上。也就是说可以节省Javascript程序员在不同平台调试所花费的大量时间,真正做到一次编写,随处运行。
当然,由于精力问题我们没有在Mozilla,Opera等浏览器上做测试,如果有谁能帮助我们测试并将结果反馈给我们,我们将非常感谢并认真对待。
2,它使用面向对象(OOP)设计方法
如果你使用过Java或C++就能深切体会到面向对象的好处,它更适合人的思维,它能让你的逻辑更加清晰,让程序更具有可重用性、可扩展性、可维护性。这一点将在本书第2章详尽的说明。
3,它使用起来比较简单
虽然借鉴了Java设计方法,但并没有把Java中那些庞大的类库原封不动的搬过来,相反,在不需要包装的地方我们还是耐住了诱惑,避免了类库的过于庞大。
在设计中我们也尽可能地使用了各种语言常用的约定、命名方式,这些语言主要是Java、PHP、Ruby。其中Ruby在迭代器、循环块等诸多方面给了我们很多启示,简化了很多往往要大量代码才能完成的工作。
4,操作HTML对象变得相当容易
首先我们提供了一个操作HTML对象(我们称之为组件Component,简称COM)的类,它可以管理HTML对象的方方面面,比如想设置一个层(ID为demo)的大小,使用下面代码即可:
对事件监听器的包装,使得监听对象的事件也变得相当轻松:
上面代码使得单击demo层时,将触发后面的函数。
更详尽的说明将在第7章阐述。
5,为富客户端开发提供了工具
针对当前方兴未艾的客户端开发,无论是Ajax,还是JSON,还是拖拽,在线编辑器,都有对应的工具类,使得一切都变得相当简单。
6,完善的注释和文档
相当重要的是,J框架几乎每个类、对象、方法、函数都有完整的注释,并将这些注释提取到一个文档里,方便查阅。文档中也有一些小的事例供开发者学习,使文档不至于苍白无力。或许将来它会成为一个标准而被广为效仿。
1.3 J框架的架构
J框架由以下几个部分组成:
1,J.core:核心类,主要提供整个框架的基础类,比如JArray(数组)、JMap(Map)、JIterator(迭代器)等等。
2,J.util:公用类,封装了一些常用的方法,比如JResponse(相应)、JHttp(封装了XMLHttpRequest)、JCookie等等。
3,J.COM:组件类,封装了HTML元素(对象)的操作,里面的组件名称可能和对应的HTML元素标签名称不一致,比如JList对应select标签,JLink对应a标签。
5,J.x:高级扩展类,主要封装了日历、选项卡、树等比较复杂的结构模型
6,J.test:测试类,实现了最基本的断言。
1.4 J框架的设计目标
1,提供最底层的Javascript封装,让中级以上的开发者在此基础上更快、更轻便、更自由的发挥。
请注意它并非提供了一个万能的“视图”框架,如果你想输入一些参数就能显示一个很花哨的窗口,那么估计让你失望了,因为我们主要提供底层的封装,更多地是管理“模型”的复杂度。这样作也是有原因的:
1) 框架为你做的事情越多,你能定制的越少。因为我们无法得知你真正想要的是什么,所以只能提供给你更多默认的,但经验告诉我们,绝多大数互动网站(并非那些小B/S的应用)都需要自己个性化的东西。
2) 视图并非是程序员的擅长,应该让美工去思考这些问题。我们需要专注自己要解决的问题:模型及模型和视图的结合。
我们承诺“更快”其实是在保证执行效率的基础上,提高程序员的开发效率,提高单位时间的生产率。
“更轻便”说明类不应过于庞大,它应该寻求程序员需求和框架功能的平衡点。随着网站的发展,浏览器负担也越来越重,为了不让用户等待过久,同时也为了节约服务器带宽开支(有人说过:21世纪第二贵的是带宽。第一是什么?当然是:人才),框架应该控制在一定字节内,那些平常用不着的功能,应该在需要的时候才加载。
“更自由”代表着我们需要关注我们需要关注的问题上,而不是每天都在无休止的调试各种浏览器兼容问题,也不必每个项目都要写一大批重复的代码,到最后臃肿的无法维护!!这些问题,J框架试着尽可能地帮你解决一部分,让你如鱼得水,让Javascript开发变得easy而有趣,有些花时间思考的问题让我们来帮你思考吧,真正的程序员知道自己应该更重视架构而不是忙于写些琐碎的代码而没了思考的时间。
2,借鉴Java、Ruby、PHP中的设计方法,研究如何在Javascript中实现一个好的设计方法
我们不得不承认,我们目前还没有做到,即还没有研究出一个出色的新的设计方法,但或许我们现在使用的设计方法可以供学习。
特别的是,Ruby语言虽然没有传说中那么神乎其神,也没有人真会以为它会取代Java,但它的一些特点值得借鉴:
1,完全面向对象
2,简洁实用
3,迭代器和块
4,没有例外(最小惊讶原则)
PHP是作者最熟悉的语言,它的发展非常惊人,虽然这也造成了它的一些混乱(命名方式、OOP),但它的功能十分强大,囊括的服务器脚本和WEB开发方方面面,J框架的未来也可能是这样。
3,保持纯粹
人生要做的事情很多,但在同一时刻我们最多只能做一两件事情。为了使J框架做得更好,我们会尽可能地使它保持纯粹,它生来主要为底层开发提供工具,将来也会是这样。
1.5 J框架 VS ?
目前的Javascript已经林林总总有一大批成熟的框架,随意在google或sourceforge搜索一把就可以找到很多优秀的作品,比如风靡开发届的prototype(http://www.prototypejs.org/)。J框架并不准备和这些框架作比较,更也不打算拿第一,如果对你有所帮助就已经达到它的目的了。
这里不得不提的是与J框架最接近的是prototype,它的设计目标是使动态WEB应用程序开发更加容易,它大量学习了Ruby的设计思想,实现了Ruby-like 类和方法。但是我们对它有以下偏见:
1,直接对Javascript内置对象进行扩展,容易造成一些混乱。比如对Array对象加入了clear ,clone, compact, each等方法,不明就理的人很难看懂以下程序:
很多人会误以为each是Array的一个内置方法。当前你用for(key in Object)结构遍历Array对象的时候也会出错(并非你想象的1, 2, 3, 4),因为它的属性已经改变,也许这种“偷偷”改你的对象属性的行为有时会让你愤怒而无助。
2,它主要针对的是“数据”,而对浏览器上发生的事情(如Request,Cookie)不太关心。
3,使用和Javascript关键字一样的命名,只是把首字母改成大写。比如Class,Try,Abstract等,而extend把实现了extends的功能,这一切都使很多用过Java或C++的程序员感觉不舒服。
其实上面所说的几个问题,并非是我们有意贬低prototype,只是我们会试着尽量避免这些问题,尽量给你少一些麻烦,多一些轻松和快乐。
1.6 谁需要J框架
有以下需求的人是需要J框架的,当然你可以硬说自己不需要:
1,因为英文比较poor学不好prototype框架的或者会用prototype看不惯它污染Javascript内置对象的,你会发现你需要的我们这里也有,甚至更多
2,想借用别人写好的基本函数快速开发和想利用已有组件构建自己系统的
3,想写习Javascript的类和对象使用方法的
4,不想花心思在各浏览器调试兼容性的
5,想在同事或同行面前耍耍酷的。恭喜你,这本书中一有机会就会教你耍酷的种种方法。
1.7 谁不需要J框架
以下这些人可能得不到J框架的帮助:
3,我不会或者只会一些最基础的Javascript,那么建议你下载一个手册,多多在实战中练习,你很快就可以使用J框架了。
1.8 相关信息
1.9 本书章节安排
第一部分,准备工作,讲述如何进行前期的准备工作,有以下几章:
第1章 简介
第2章 面向对象
第3章 编程风格
第二部分,核心编程,讲述J框架的核心应用,有以下几章:
第4章 如何开始
第5章 核心类
第6章 公用类
第7章 组件类
第三部分,高级应用,讲述J框架的高级应用,有以下几章:
第8章 高级扩展类
第9章 画图类
第四部分,测试,讲述如何对自己写的程序进行简单的单元测试,只有一章内容:
第10章 测试类
第五部分,未来,讲述J框架的未来去向:
第11章 未来之路
发表于 @ 2007年07月25日 21:00:00|评论(loading...)|编辑