【读书】代码坏味道-《重构》

Martin Fowler也在其著作《重构:改善即有代码的设计》提到:“代码坏味道(Bad Code Smells)”是低质量的代码设计和实现所显现的“症状”。书中罗列了22种代码坏味道以及对应的重构手法。

  • 1 Duplicated Code --(重复代码)难维护。

[解决方法]:同一个类中则提取公共函数,不同类中可以函数提炼独立类,或者提到父类。

  • 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 --(偏爱基本类型)热衷于使用int,long,String等基本类型。

[解决方法]:反复出现的一组变量,完全可以用对象来代替这些变量。

  • 10 Switch Statements --(switch语句)switch惊悚现身

[解决方法]:多数情况下简单的多态就可以解决,或者是枚举可以解决。另外就是state/strategy模式。

  • 11 Parallel Inheritance Hierarchies --(平行继承)增加A类的子类ax,B类也需要相应的增加一个bx。

[解决方法]:应该有一个类是可以去掉继承关系的,继承改为组合。

  • 12 Lazy Class --(冗赘类)如果他不干活了,炒掉他吧。

[解决方法]:如果一个类体现不出其价值,把这些不再重要的类里面的逻辑,合并到相关类,删掉旧的。

  • 13 Speculative Generality --(夸夸其谈未来性)

[解决方法]:不用的类或属性或方法删掉,多余的继承折叠,多余的委托内联化,过大的理想具体化。

  • 14 Temporary Field --(临时字段)仅在特定环境下使用的变量。

[解决方法]:将这些临时变量集中到一个新类中管理。

  • 15 Message Chains --(消息链)过度耦合的才是坏的。

[解决方法]:拆函数或者移动函数。

  • 16 Middle Man --(中介)大部分都交给中介来处理了。

[解决方法]:把过度委托的中间类删除,或者把过度委托的函数放在本类,或者用继承替代委托。

  • 17 Inappropriate Intimacy --(太亲密)职责不清,两个类彼此使用对方的私有的东西。

[解决方法]:划清界限拆散,或合并,或改成单项联系。继承往往造成过度亲密,使用委托代替

  • 18 Alternative Classes with Different Interfaces --(相似的类,有不同接口)异曲同工的类

[解决方法]:重命名,移动函数,或抽象子类。要么分开,要么合并。

  • 19 Incomplete Library Class --(不完善的类库)

[解决方法]:本地使用可以包成新的类。加少量的函数则包一层函数

  • 20 Data Class --(纯数据类)类很简单,仅有公共成员变量,或简单操作函数。

[解决方法]:将相关操作封装进去,减少public成员变量(映射了数据库的对象除外)。

  • 21 Refused Bequest --(继承过多)父类里面方法很多,子类只用有限几个。

[解决方法]:用委托替代继承关系。

  • 22 Comments --(太多注释)这里指代码太难懂了,不得不用注释解释。

[解决方法]:避免用注释解释代码,而是说明代码的目的,背景等。好代码会说话。

  • 注:

作为一本很多年前的书,其中关注的Java语言与软件工程方法论已经发展了,有部分“坏味道”需要发展的眼光来看。


分享到:


相關文章: