什么是有坏味道的代码?
重复代码:如果在一个以上的地方看到相同的程序结构,那么可以肯定将他们合二为一程序会变得更好。
过长的函数:程序越长越难以理解,将函数分解给函数取个好名字,代码阅读者可以看函数名就可以了解该函数的作用。
过大的类:如果想利用单个类做太多的事情,内部就会出现太多的实例变量,一旦如此就会有很多的重复代码。可以将几个相关的变量提炼至一个新类中。
过长的参数列:太长的参数列难以理解,一旦你需要更多的数据就不得不修改它会造成前后不一致不易使用。可以将参数封装成对象。
发散式变化:某个类经常因为不同的原因在不同的方向上发生变化。
霰弹式修改:和 发散式变化相反,如果遇到某种变化都必须在许多不同的类里做出许多小修改。发散式变化是指“一个类受多种变化的影响”,霰弹式修改是指“一种变化引发多个类相应修改”。这两种情况下都希望去修改代码,使“外界变化”和“需要修改的类”趋于一一对应。
依恋情节:函数对某个类的兴趣高于自己所处类的兴趣,比如某个函数为了计算某个值从另一个对象调用了几乎半打的取值函数。
数据泥团:常常可以在许多地方看到相同的三四项数据:两个类中相同的字段、许多函数签名中相同的参数。
令人迷惑的暂时字段:对象里面的某个实例变量仅为某种特定情况而设。
过度耦合的消息链:对象与对象之间的请求中间经过许多级的请求。
狎昵关系:两个类花很多的时间去探寻彼此的private成分。
异曲同工的类:两个函数做同一件事,却有着不同的签名。