代码的味道(转贴之UMLCHINA,讲述在什么情况下进行refactoring)
(说明,这是erptao.org,refactoring论坛中关于Code Smell的一个贴子,以后我会把相关内容继续转贴到这里)
什么时候需要Refactoring?
代码的味道是高水平程序员对“好程序“的一种感觉,他们具备一种能力,即使不涉及程序代码的具体实现就能看出你的设计是否合理。
如果代码有“异味“,那么你需要进行Refactorying.
1.重复代码(Duplicate Code)
即使是一两句代码的重复也需要refactoring,有时候重复不是那么明显,你需要首先进行其他的refactoring才能看到代码重复。排除代码重复是OO软件工程最重要的研究课题之一
2.长方法(Long Method)
来自于面向过程的思路,即使能够在一页内能够显示的方法也可能太长。
3.大类(Large Class)
一个类含有太多的责任和行为
4.参数太多(Long Parameter List)
对象含有状态,不再需要太多的参数。
5.不一致的变化(Divergent Change)
不要把变化速度不同的东西放在一起。不要把一个方法对每个子类的变化的部分和不变化的部分放在一起。不要把对象中每秒都在变化的实例变量和一个月才变化一次的势力变量放在一起...等等。
6.Shotgun Surgery
改变影响到太多的类和方法
7.特性羡慕(Feature Envy)
对其他对象中的数据太感兴趣了
8.数据从(Data Clumps )
一块数据到处一起使用,他们应该有自己的类
9.原始类型困扰(Primitive Obsession)
用类代替原始数据类型
10.开关语句(Switch Statement)
面向对象由其他办法来处理这些依赖于类型的方法。
11.并行继承层次(Parallel Inheritance Hierarchies )
有时候有用但有时候不必要
12.惰类(Lazy Class)
不足以自己成为一个类,应该排除
13.投机通则(Speculative Generality )
不要太多考虑为将来而建立的灵活性
14.消息链(Message Chain )
硬性把客户和导航结构相耦合
15.中间人(Middle Man )
如果他所有的事情就是在做分派,那么应当删除。
16.不合适的亲密(Inappropriate Intimacy)
限制对其他类内部结构的知识和了解。
17.不完整的库类(Incomplete Library Class )
某些时候必须扩展一增加所需的功能
18.数据类(Data Class )
应当添加任务和行为来处理它的数据
19.被拒绝的遗产(Refused Bequest )
子类很少利用父类给予它们的东西
20.注释(Comments )
注释是说明why而不是what的好地方。