最近在对我两个月前的代码进行修补,由于发现存在许多bug。人生最痛苦的事情就是修补菜鸟的代码,虽然我现在依然是个菜鸟,但是相对于两个月前的我来说,至少有一定的进步。如今回顾自己的代码,真的觉i得只有一个字----嫩,或者再加一个----弱(相对现在)!不过可以理解的是这毕竟是我的人生第二个小project(OA),可以理解,但是不容忽视。只要存在以下的问题:
1.类与类,接口之间,没有充分的利用到java的三大特色,例如,有一些类之间的属性是共有的,我没有将之抽取出来单独成类然后又其他类继承;一些方法完全可以通过接口来实现,而我没有做到。导致项目整体代码重用率极其低,间接地拖低了开发效率。
2.方法和类过于庞大,尤其是方法,有的甚至达到300行,凝练度不够。
3.方法中生成很多标识状态的变量(如存在session中的标识已经第几次修改表了等的标识变量),而且变量名字不够含义明晰,导致阅读起来非常困难(幸亏是两个月前的我还有印象,要是半年前或更久的话,读起来的话,会猝死的。)
4.还有就是,编程不够大气!!总是想着如何节省访问DB的次数或者是节省tomcat的空间(不想存一个Bean),于是总是把设置一些变量存放在session中,导致session的存放的属性过于多,而且是那种一个一个的标识变量(以基本类型为多),出现了3中所述的情况,但是阅读起来也更加令人猝死,因为前者只是在一个方法体内,可是存放在session中的属性可以跨整个项目,于是,有时候在第10个servlet中阅读到获取一个session的属性,但是会忘掉是在哪里第一次存放session中的,或者是又得回到第2个servlet中去看是什么作用的。存放在session中的属性,由于跨度过大,导致后期的可读性非常低,所以要学会别什么都想着节省,有时候还是得耗点代价去保证项目的可阅读性的,也许多一次连接DB,就更有利于后期维护。
5从现在可以看出自己当时是有点设计模式的使用欲了,但是道行尚浅,不能很好的理解和控制,导致没有用到抽象工厂模式和单例模式的精髓。
6代码都是纯手写,没有借助一定的工具来自动生成,导致servlet一些地方的布局不是很科学(虽然没错误)。
7注释不够,虽然有。serlvet中有一些代码,尤其是那些冗肿的代码处,注释还可以详细。
8没有借助 GITHUB,没有版本控制(当然当初也不知道这个工具)。导致自己的项目中要修改的代码都是就地注释掉的(原封不改的注释的,因为怕改后更错,就可以复原),导致项目中垃圾代码过多。
9.只想着节省tomcat内存和减少DB开支,但是却没有意识到编程过程中的“高代价误区”
如:1.使用+拼接字符串,很耗内存;
2. 居然这样写:for(~~~){Class className = new Class className;~~~},显然没有理解java的GC机制。--非常浪费内存!
3.trycatch居然放在循环中 ---只能说还嫩了!
4.~~~5.~~~~~~
10.逻辑不够严谨。算法低效率。
~~~~~~~~~~~~~~~~~N~~~~~~~~~~N~~(时间有限,而且已另留记录,在此不赘言。)
综合上面的缘故,所以导致现在的我几乎猝死----两天内要修完五个模块,共涉及50多个servlet,17个jsp页面。这回可真是血的教训!!
最近也有在看一看外国人写的OA的代码,他们的代码里都会定义非常多的类、接口、方法,类与类,类与接口之间很多是继承和实现的关系,方法的代码行数很少,大部分都没有超过20行代码,他们的代码都是方法之间的调来调去,不像我们的代码,一个方法下来几十上百甚至两三百行都是最基本的语句构成,很少像他们那样调用自己的方法。
------他们真的是做到了“高内聚低耦合”!!我想,如果我是后期维护他们这个网站的人的话,肯定会非常的轻松,而且肯定很感激他们的努力(让后来者可以活得更容易些)。
两者对比,我发现以下个人的原因:
a.经验不足,编码前期分析设计不到位
b.为了快速开发,没有经过细致分析设计(欲速则不达啊。。。不过我觉得当时的话在细致设计也是难好到哪去,毕竟太菜了)
c.缺乏意识,只为实现功能而写代码,不管代码质量
修改的过程虽然是痛苦的,但是并非毫无收获的,至少知道自己存在的缺点,和优点,知道哪里需要提升,其次改的过程中,也有一些新的项目感悟。又是一次收获的过程!!!
总的来说,项目代码设计做到:命名清晰易懂,抽取公共部分独立成类,接口或方法,功能尽量细化(单元化,模块化)----终极目标:高内聚,低耦合,高效率,低耗能!!!!!
一个菜鸟在代码重构中的感想
原文:http://blog.itpub.net/29900383/viewspace-1363485/