还记得曾经多少次地重写你曾写过数十次的HTML代码吗?即使你保存着以前的代码,为了在新的应用中重新使用这些代码你又花费了多少的时间?由于我经常会碰到这种情况,因此决心探索出一种新的方法。
过去,许多的开发人员都建立了“可重复使用的”跨平台的DHTML代码库,但这些代码为大都存在着一些严重的缺点。首先,它们都不符合标准的面向对象方法,使得在使用、修改或扩充时非常不方便。其次,由于在每个脚本中都包含了适用于不同浏览器的代码,每当有新的浏览器推出时都会使代码变得更加臃肿、复杂。我在这篇文章中介绍的方法将在解决这些问题的基础上达到组件重用的目的。
这篇文章将详细说明建立一个可重复使用的DHTML部件的可扩充结构的全过程,每个小节介绍这个过程的一个部分。
实现可重用性的软件工程方法
我们经常会保存以前编写过的代码,以便在其他的项目中重复使用。一旦有这种需求时,我们就会对原有的代码进行编辑,如果能记起当初是如何设计这些代码或它们的工作原理,那我们就太幸运了,然而往往事与愿违,我们已经忘记了有关这些代码的资料。尽管这些代码从技术上说是可重复使用的,但我们最多只能重复使用代码而不能重复使用组件,使用原来的代码可能带来新的代码质量问题。要编写高质量的代码,设计过程要比具体的编写过程更重要,如果你仓促地使用原来的代码,那就基本上跳过了设计阶段,你不能保证自己已经真正地理解了这些代码,不能删除其中你不需要的部分,甚至删除了应该保留的部分。
由于我们的目标是建立一个真正的可重复使用和可扩展的结构,我们将这一问题看作是一个软件工程而不是一个网页脚本,到本篇文章结束时,我们将利用被称作面向对象的现代软件开发方法设计出一个脚本。
在这里我们简单地介绍一下面向对象的设计方法,面向对象设计方法的主要特点是封装性、继承性和多态性。在建立可重复使用的组件时,最重要的是封装性,也就是说把组件作为一个“黑盒子”,组件的用户无需清楚组件内部的工作原理,用户也无需清楚一个对象的工作原理,只需知道如何使用它即可。关于JavaScript面向对象设计中的对象模式的详细说明请参阅网景公司的《客户端JavaScript指导》一书中的有关章节。