好久没光顾自己的小店了,最近忙得一P,实在是不堪重负啊!月初一个人被派来北京,天天让客户围着转连写代码的时间都没有,白天跟他纠缠晚上加班还要学习电力知识----实在是崩溃,上周同事的到来实在是给自己减压不少。
最近遇到了好多不爽之事:首先是数据库连接没有释放,导致WEBLOGIC两天死一次----连接池连接分配完了!根据日志显示,绝大部分来源于WEB程序,领导让彻查JSP。奶奶的JSP绝大部分都是我写的,肯定不会有问题!但就是不知道为什么问题都出现在JSP方面呢?
这几天在修改GUI程序(考核系统有客户端和WEB端,客户端相当于后台管理)的时候发现同事的代码中数据库连接都没有释放掉,难怪抛出那么多连接数据库失败的异常呢!没办法,先查CS程序吧!我靠,真惊了,这都写了些什么?想起《重构》中的一句话:真是个绝佳的小丑!虽然之前已经领教过大家的代码水平,但还是不免为之一震。记得前阵子在修改别人代码的过程中我就差点吐血,哎,现在真是"血"上加霜啊!
鉴于此,在修改过程中我觉得发现很多问题,总结一下自己的心得:
1、一些公用的类库(比方说时间格式处理,数据类型转换),应该说在每个系统中都是必不可少的,建议由专门的人员维护这一部分并打包,编写说明文档,让使用者清晰可见都有哪些功能可用,从而避免把类库COPY或重复写到模块中;
注:我们的客户端是按模块来打包,在每个模块中都把公用代码COPY了一遍,有的修改过有的没有修改(公共类代码开始时由我开发维护),结果我现在累得一P,每个类要改十几遍!
2、变量的定义,重构中讲,应该能望文生义或者说必须望文生义,过多的注释也是一种冗余;
注:我们的程序中有定义全局变量int a,JTextArea t4(鸟知道是个啥意思^_^),一个类2000行只有一行注释,我还是宁愿看到注释冗余的代码!
3、变量的定义,变量定义在该出现的位置,只有在使用的时候才定义,而且每一段代码应该在程序中以注释或空格行来作为间隔,一段代码也应该以实现一个功能为标准(也许只是逻辑概念上的功能,比方说赋值、循环);
注:重构中的延迟对象的创建跟上述有点相似,但上述仅以可读性为准则!
4、if else return的运用,如果在if后跟return请不要再画蛇添足else。例如if (true) { return;} else {...};
注:从重构角度讲,这应该算是代码的可读性吧?
5、方法中的代码量太多,把成块的代码提取出来组成另一个方法,合适的方法名同样容易望文生义;
注:前天听同事说他遇到个家伙一个类写了8K行代码!估计这家伙是想搞死谁!
6、数据库连接,老生长谈的问题了,打开后必须释放,网上有各种优雅的方式来释放连接;
注:前天领导给我的一两个文件.java和.jsp----一个高人写的,只可惜小弟才疏学浅,只见在.java文件中打开连接,没找到关闭之所在,后来经另一高人点拨,才发现在.jsp中关闭----所有的业务处理和数据返回都结束才关闭!个人以为,这种方式效率肯定高,因为只开关一次数据库连接,但同时风险也很大:其一,要保证程序的健壮性,如果有异常肯定关不掉;其二,个人一直不把.jsp当作正规军,虽然它会被编译成servlet,但我觉得跟html混在一起很容易忽略掉关闭连接!
7、同一个方法中两次连数据库,不要用同一个变量或者说不用类中全局的变量,以免有释放不掉的情况;
注:简单地讲,对象在我们可见的范围内也就是变量(引用),引用一旦指向新的对象,之前的对象便不可重获,从而也就关不掉连接!比如我们的代码的在保存数据时好多要先执行删除操作,在保存中调用删除,如果用全局变量就会出问题。
暂时先写这么多吧,后期再不断更新,反正我还要继续被绝佳的小丑蹂躏着!