1. 可变数据
定义
:对数据的修改经常导致出乎意料的结果和难以发现的bug。
影响
:在一处修改数据,却在另一处造成难以发现的破坏,影响可维护性。
重构目标
:应用数据不变性,不可变性是强大的代码防腐剂。
重构方法
:
- 封装变量
- 拆分变量
- 提炼函数
- 移除设值函数
- 查询取代派生
- Builder 模式创建不可变对象
- 引用对象改为值对象
- 函数式编程
可变数据的常见特点
:
- 一个变量用作不同的目的
- 数据类型中,用 public 修饰非 final 字段
- 有 set 方法或其他改变数据的方法
- 一个成员变量的值可通过其他字段计算得到
- 对外暴露内部变量的可变引用
重构中可能用到的快捷键操作
:
操作 | 快捷键 |
---|---|
封装变量 | Ctrl + Alt + Shift + T -> Encapsulate Fields 鼠标右键 -> refactor -> Encapsulate Fields |
拆分变量(抽提函数) | Ctrl + Alt + M |
用内联移除移除设值函数 | Ctrl + Alt +N |
直接删除 | Alt + Del |
Builder 模式创建不可变对象 | Builder 模式创建不可变对象 鼠标右键 -> refactor -> Replace Constructor as Builder |
2. 发散式变化
定义
:某个模块经常因为不同的原因在不同的方向上发生变化。
影响
:当处于多个不同上下文的外部行为变化时,都会引起同一个类或模块的修改,影响了代码的可读性和可维护性。
重构目标
:分离变化,职责单一,结构更稳定。
重构方法
:
- 拆分阶段
- 搬移函数
- 提炼函数
- 提炼类
发散式变化的常见特点
:
- 多个变化方向之间有较多的来回调用
- 模块内部混合了多类处理逻辑
重构中可能用到的快捷键操作
:
操作 | 快捷键 |
---|---|
抽取方法 | Ctrl + Alt + M |
实例/静态方法搬移 | F6 |
内联 | Ctrl + Alt + N |
实例方法变为静态方法 | Ctrl + Alt + Shift + T -> Make Static 鼠标右键 -> refactor -> Make Static |
静态方法变为实例方法 | Ctrl + Alt + Shift + T -> Convert To Instance Method 鼠标右键 -> refactor -> Convert To Instance Method |
引入参数对象 | Ctrl + Alt + Shift + T -> Introduce Parameter Object 鼠标右键 -> refactor -> Introduce Parameter Object |
提取字段/参数/变量 | Ctrl + Alt + F/P/V |
提炼接口 | Ctrl + Alt + Shift + T -> Extract Interface 鼠标右键 -> refactor -> Extract Interface |
声明:本文仅用于学习交流。
本文含有隐藏内容,请 开通VIP 后查看