年前参加了软件重构的培训,就像老师所说,几天的培训不会有实质的变化,主要的目的是出发更深层次的思考和不断的实践,
现在主要关注以下几种坏味道,等大家都驾轻就熟之后,再尝试去除更多的坏味道
1, duplicated code,重复代码是最常见,丑陋的坏味道,有以下一些解决办法
extract method -》pull up method
template method 这个准则最经常使用
substitute algorithm (这个准则实际中使用的还是比较少的,除非原有代码实在是太混乱了)
extract class
2, long method, 项目中最长的方法将近2000行,
extraact method
replcae temp with query (个人认为,这个完全是为了代码的可读性,当项目庞大的时候,尤其重要)
introduce parameter object (将参数list封装成class)
preserve whole object (传递整个对象,而不是对象中某几个成员,可以达到减少参数个数的目的)
replacemethod with method object (临时变量-》类的成员变量)
重要的切入点:寻找注释,有注释的地方通常可以提炼代码
decompose conditional (把稍微复杂的条件表达式封装成method)
3, long class, 超长的类,让人望而生畏。尤其是长时间的阅读代码,会增加疲劳感
extract class
extract subclass
extract interface(先确定客户端如何使用它们,再做重构,会更有针对性)
如果是GUI class, duplicate observed data, (比如事件模型)
4, long parameter list
replace parameter with method
preserve whole object
introduce paramter object
5, divergant change(发散式变化, 一个class受多种变化影响)
extract class
6, shotgun surgery(霰弹式修改,一种变化引发多个class相应修改)
move method
move field
inline class
重构准则extract class,inline class看起来是相反的,说明一个问题,重构有一个度的问题,软件设计也有一个度的问题,这个度的把握需要case by case来看,没有一个定式准则,只能靠经验来判断,类之前的耦合度,成员变量之间,成员方法之间的关联度与项目的复杂度有关系,并且要根据客户端如何使用来判断决定。