以下内容总结自《重构—改善既有代码的设计》读书笔记
顺便向大家推荐一下这本书
重构—改善既有代码的设计重新组织函数
如果要操作函数本身和局部变量,比如增加或删除,可以试试以下的方式
名称 | 何时需要 | 做法 |
---|---|---|
Extract Method | 需要提炼函数时 | Refactor-->Extract-->Method |
Inline Method | 函数本体和名称同样容易理解 | Refactor-->Inline |
Inline Temp | 有一个只被简单表达式赋值一次的临时变量 | Refactor-->Inline |
Replace Temp with Query | 有一个保存某一表达式的运算结构的临时变量 | Refactor-->Replace Temp with Query |
Introduce Explaining Variable | 有一个复杂的表达式 | 在表达式后调用.var |
Replace Method with Method Object | 在一个大型函数中,对局部变量的过度使用导致无法使用Extract Method | Refactor-->Extract-->Method Object, Refactor-->Move |
在对象间搬移特性
想重新处理抽象粒度?快试试下面的
名称 | 何时需要 | 做法 |
---|---|---|
Move Method | 函数位置不对 | Refactor-->Move |
Move Field | 字段位置不对 | Refactor-->Move |
Extract Class | 一个类做了过多的事 | Refactor-->Extract-->Super Class |
Inline Class | 一个类做的事不够 | Refactor-->Inline |
重新组织数据
名称 | 何时需要 | 做法 |
---|---|---|
Self Encapsulate Field | 直接访问字段的方式不太合适时 | Refactor-->Encapsulate Fields |
Replace Magic Number with Symbolic Constant | 有魔法数时 | Extract-->Constant |
Encapsulate Field | 有public修饰的字段时 | Encapsulate Fields |
简化条件表达式
名称 | 何时需要 | 做法 |
---|---|---|
Decompose Conditional | if判断有点复杂 | 选中-->Extract-->Method |
简化函数调用
要修改函数名、函数参数、函数可见度?
名称 | 何时需要 | 做法 |
---|---|---|
Rename Method | 一个方法名称不够具体 | Rename |
Add Parameter | 一个方法需要新参数 | Change Signature |
Remove Parameter | 一个方法不再需要某个参数 | Change Signature |
Introduce Parameter Object | 几个参数总是固定的一起出现 | Extract-->Parameter Object... |
Hide Method | 方法可见度修饰不合适时 | Analyze-->Inspect Code-->Declaration access can be weaker |
Replace Constructor with Factory Method | 应用工厂模式取代构造方法时 | Replace Constructor with Factory Method... |
处理概括关系
使用下面的一些方法去理清继承体系吧
名称 | 何时需要 | 做法 |
---|---|---|
Pull Up Field | 两个子类的某对属性的意思相同 | Pull Members Up.. |
Pull Up Method | 子类的某些方法的执行结果相同 | Pull Members Up.. |
Pull Up Constructor Body | 子类的构造方法内有重复的语句 | 在父类中建立执行这些语句的构造方法,子类构造方法改为调用父类的构造方法 |
Pull Down Method | 父类的某个方法只和部分子类有关 | Pull Members Down.. |
Pull Down Field | 父类的某个属性只和部分子类有关 | Pull Members Down.. |
Extract Superclass | 需要提取父类 | Extract-->Superclass.. |
Extract Interface | 需要提取接口 | Extract-->Interface.. |
Replace Inheritance with Delegation | 某个子类只需要用超类的一部分 | Replace Inheritance with Delegation.. |
网友评论