Duplicated Code(重复代码)
常见问题
- 同一个类的两个函数含有相同的表达式
- 两个互为兄弟的子类内含相同的表达式
- 两个毫不相关的类有相同或相似的代码
常用的重构方法:
- Extract Method 提炼方法
- Pull Up Method 字段上移
- Extract Class 提炼类
Long Method (过长函数)
常见问题
- 在开发维护过程中,函数越来越长,逻辑越来越复杂,难以理解
常用的重构方法:
- Extract Method 提炼方法
- Decompose Conditional 分解表达式
注:函数并不是越短越好,一个函数尽量只完成一个功能。
Large Class(过大的类)
常见问题
- 单个类功能太多
- 有大量的实例变量,和重复代码
常用的重构方法:
- Extract Class 提炼类
- Extract Subclass 提炼子类
- Extract Interface 提炼接口
Long Parameter List (过长参数列表)
常见问题
- 函数功能越来越大
- 不停添加各种特殊操作
常用的重构方法:
- Replace Parameter With Method 以函数对象取代函数
- Preserve Whole Object 保持对象完整
- Introduce Parameter Object 引入参数对象
DivergentChange (发散式变化)
常见问题
- 某个类因为不同原因在不同方向上发生变化,如修改某个功能,需要同时修改某几个函数
常用重构方法
- Extract Class 提炼类
Shotgun Surgery (散弹式修改)
常见问题
- 一种变化引起多个类修改
常用重构方法
- Move Method 移动方法
- Move Field 移动字段
- Inline Class 内部类
Feature Envy (依恋情结)
常见问题
- 类函数对某个类的以来程度远大于当前类
常用重构方法
- Extract Method 提炼方法
- Move Method 移动方法
Data Clumps(数据泥团)
常见问题
- 数据结构设计混乱,多个类中的某些字段总是同时出现
常用重构方法
- Extract Class 提炼类
- Preserve Whole Object 保持对象完整
- Introduce Parameter Object 引入参数对象
Primitive Obsession(基本类型偏执)
常见问题
- 大量使用基本类型
- 未对数据进行有效的抽象
- 未对总是同时出现的字段封装
常用重构方法
- Replace Type Code with Class
- Extract Class
Switch Statements
常见问题
- 面向对象程序应该少用Switch(或Case)
- Switch散布在多个地方,修改会影响多个类
常用重构方法
- Replace Conditional with Polymorphism
- Replace Parameter with Explicit Methods
Parallel Inheritance Hierarchies(平行继承体系)
常见问题
- 为某个类添加子类时,必须为另一个类相应的增加一个子类
常用重构方法
- Move Method
- Move Field
Lazy Class(冗赘类)
常见问题
- 类和函数含有冗余操作
常用重构方法
- Collapse Hierarchy
- Inline Class
Speculative Generality(夸夸其谈未来性)
常见问题
- 过分强调扩展性,使用代码难以理解
- 添加许多多余的参数
常用重构方法
- Collapse Hierarchy
- Remove Parameter
Temporary Field (令人迷惑的临时字段)
常见问题
- 类中某些字段,只有在及其特殊的条件下才会使用
常用重构方法
- Extract Class
Message Chains(过度耦合的消息链)
常见问题
- 多个类之间依赖大,a.x().y().z()....
- 产生多个临时变量
常用重构方法
- Hide Delegate
Middle Man
常见问题
- 过度使用委托,某个类的大部分功能都在委托给其他类
常用重构方法
- Remove Middle Man
- Inline Method
- Replace Delegation With Inheritance
Inappropriate Intimacy (狎昵关系)
常见问题
- 两个类互相依赖度极高,类的内部实现影响彼此
常用重构方法
- Move Method
- Move Field
- Replace Inheritance Delegation
Alternative Class with Different Interfaces(异曲同工类)
常见问题
- 两个类 、函数做着实现相同的功能
常用重构方法
- Extract Superclass
- Move Method
Incomplete Library Class(不完美的库类)
常见问题
- 引用的库设计不完善
- 有许多特殊操作
常用重构方法
- Introduce Foreign Method
- Introduce Local Extensions
Data Class (纯稚数据类)
常见问题
- 只包含数据和getter setter
- 内部字段的 处理分散在各个类中
常用重构方法
- Encapsulate Field
- Encapsulate Collection
- Remove Setting Method
Refused Bequest(被拒绝的馈赠)
常见问题
- 子类继承过多不需要功能
常用重构方法
- Push Down Method
- Push Down Field
Comments(过多的注释)
当你感觉需要撰写注释时,请先尝试重构,试着让所有注释变得多余