auto commit
This commit is contained in:
parent
c9fd81f261
commit
cadf3c47f9
31
notes/重构.md
31
notes/重构.md
@ -33,7 +33,6 @@
|
||||
* [21. Refused Bequest(被拒绝的馈赠)](#21-refused-bequest被拒绝的馈赠)
|
||||
* [22. Comments(过多的注释)](#22-comments过多的注释)
|
||||
* [构筑测试体系](#构筑测试体系)
|
||||
* [重构列表](#重构列表)
|
||||
* [重新组织函数](#重新组织函数)
|
||||
* [1. Extract Method(提炼函数)](#1-extract-method提炼函数)
|
||||
* [2. Inline Method(内联函数)](#2-inline-method内联函数)
|
||||
@ -270,7 +269,7 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
|
||||
|
||||
## 5. Divergent Change(发散式变化)
|
||||
|
||||
一个类受到多种变化的影响;
|
||||
设计原则:一个类应该只有一个引起改变的原因。也就是说,针对某一外界变化所有相应的修改,都只应该发生在单一类中。
|
||||
|
||||
针对某种原因的变化,使用 Extract Class 将它提炼到一个类中。
|
||||
|
||||
@ -278,17 +277,19 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
|
||||
|
||||
一个变化引起多个类修改;
|
||||
|
||||
使用 Move Method 和 Move Field 把所有需要修改地代码放到同一个类中。
|
||||
使用 Move Method 和 Move Field 把所有需要修改的代码放到同一个类中。
|
||||
|
||||
## 7. Feature Envy(依恋情结)
|
||||
|
||||
一个函数对某个类的兴趣高于对自己所处类的兴趣,通常是过多访问其它类的数据。
|
||||
一个函数对某个类的兴趣高于对自己所处类的兴趣,通常是过多访问其它类的数据,
|
||||
|
||||
使用 Move Method 将它移到该去的地方,如果对多个类都有 Feature Envy,先用 Extract Method 提取出多个函数。
|
||||
|
||||
## 8. Data Clumps(数据泥团)
|
||||
|
||||
有些数据经常一起出现,比如两个类具有相同的字段、许多函数有相同的参数。使用 Extract Class 将它们放在一起。
|
||||
有些数据经常一起出现,比如两个类具有相同的字段、许多函数有相同的参数,这些绑定在一起出现的数据应该拥有属于它们自己的对象。
|
||||
|
||||
使用 Extract Class 将它们放在一起。
|
||||
|
||||
## 9. Primitive Obsession(基本类型偏执)
|
||||
|
||||
@ -296,6 +297,8 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
|
||||
|
||||
## 10. Switch Statements(switch 惊悚现身)
|
||||
|
||||
具体参见第一章的案例。
|
||||
|
||||
## 11. Parallel Inheritance Hierarchies(平行继承体系)
|
||||
|
||||
每当为某个类增加一个子类,必须也为另一个类相应增加一个子类。
|
||||
@ -332,19 +335,23 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
|
||||
|
||||
## 18. Alernative Classes with Different Interfaces(异曲同工的类)
|
||||
|
||||
两个函数做同一件事,却有着不同的签名。
|
||||
|
||||
使用 Rename Method 根据它们的用途重新命名。
|
||||
|
||||
## 19. Incomplete Library Class(不完美的类库)
|
||||
|
||||
类库的设计者不可能设计出完美的类库,当我们需要对类库进行一些修改时,可以使用以下两种方法:如果只是修改一两个函数,使用 Introduce Foreign Method;如果要添加一大堆额外行为,使用 Introduce Local Extension。
|
||||
|
||||
## 20. Data Class(幼稚的数据类)
|
||||
|
||||
它只拥有一些数据字段。
|
||||
它只拥有一些数据字段,以及用于访问这些字段的函数,除此之外一无长物。
|
||||
|
||||
找出字段使用的地方,然后把相应的操作移到 Data Class 中。
|
||||
|
||||
## 21. Refused Bequest(被拒绝的馈赠)
|
||||
|
||||
子类继承超类的所有函数和数据,但是它只想要一部分。
|
||||
子类不想继承超类的所有函数和数据。
|
||||
|
||||
为子类新建一个兄弟类,不需要的函数或数据使用 Push Down Method 和 Push Down Field 下推给那个兄弟。
|
||||
|
||||
@ -356,14 +363,14 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
|
||||
|
||||
Java 可以使用 Junit 进行单元测试。
|
||||
|
||||
单元测试的对象是类的方法,而功能测以客户的角度保证软件正常运行。
|
||||
测试应该能够完全自动化,并能检查测试的结果。Junit 可以做到。
|
||||
|
||||
小步修改,频繁测试。
|
||||
|
||||
单元测试的对象是类的方法,而功能测是以客户的角度保证软件正常运行。
|
||||
|
||||
应当集中测试可能出错的边界条件。
|
||||
|
||||
# 重构列表
|
||||
|
||||
小步前进,频繁测试。
|
||||
|
||||
# 重新组织函数
|
||||
|
||||
## 1. Extract Method(提炼函数)
|
||||
|
Loading…
x
Reference in New Issue
Block a user