最近在做关于公司流程的Bugzilla定制项目,基本的需求就是使用JavaScript来check流程(PR/CR/Review/TimeTracking)的状态迁移时的必填项不能为空。接下来我就写写项目做到现在自己的一些感触。
由于以前没有使用过JavaScript,也比较欠缺Web编程方面的经验,只是满久之前看过一本这方面的书(至于书有没有读完也记不清了),所以一开始调试JS代码的时候,使用了比较低效的方式,就是直接用alert来定位JS代码中的问题。这样做的效率真的很低,如果碰到些莫名其妙的问题,这样的方法还不一定能找到问题真正的所在。后来自己在网上查找到了Firebug ,加上Firefox,用来Debug JS,简直就是绝配,开发效率也提高了不少。
还有就是JS的代码量的问题。等基本功能做完,发现代码已经快到1400行了,吓一跳。立马就想起重构。看了一下代码,发现可以改进的地方还真的是不少,把代码重构了一下,将所有不同状态下的mandatory域和check函数都存到一张表中,这样在需要的时候就可以通过检索这张表来获取,而不用像以前那样使用函数生成。经过这一轮后,JS代码量一下缩短到1000行左右。第二轮重构,我将所有域的check函数划分为几类通用模板,将函数所需的参数也存到前面的那张表里,这样折腾之后,代码只有600多行了。
好的数据结构真的可以节省大量的代码啊。经过重构后,我发现程序的扩展性也增强不少,虽然这里我也只用了简单的表格驱动的方法,《Code Complete》 上还是有很多的东西可以学习的。
真是生命不息,重构不止啊!