重构阅读笔记1
第一章 重构,第一个案例
- 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。P7
- 重构之前,首先检查自己是否有一套可靠的测试机制。这些测试必须有自我检验能力。P8
- 重构技术就是以微小的步伐修改程序。如果你犯下错误,很容易便可发现它。P13
- 任何一个傻瓜都能写出计算机可以理解的代码。唯有写出人类容易理解的代码,才是优秀的程序员。P15
第二章 重构原则
- 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。P53
- 重构(动词):使用一系列重构手法,在不改变可观察行为的前提下,调整其结构。P53
- 三次法则:事不过三,三则重构。P58
第三章 代码的坏味道
页码76
- 代码坏味道:P76
- Duplicated Code(重复代码)
- Long Method(过长函数):程序越长越难理解,小函数所带来的全部利益——解释能力、共享能力、选择能力。
- Large Class(过大的类)
- Long Parameter List(过长参数列)
- Divergent Change(发散式变化):一个类受多种变化的影响。
- Shotgun Surgery(散弹式修改):一种变化引发多个类相应修改。
- Feature Envy(依恋情结)
- Data Clumps(数据泥团)
- Primitive Obsession(基本类型偏执)
- Switch Statements(switch惊悚出现)
- Parallel Inheritance Hierarchies(平行继承体系)
- Lazy Class(冗赘类)
- Speculative Generality(夸夸其谈未来性)
- Temporary Field(令人迷惑的暂时字段)
- Message Chains(过度耦合的消息链)
- Middle Man(中间人)
- Inappropriate Intimacy()
- Alternative Classes with Different Interfaces(异曲同工的类)
- Incomplete Library Class(不完美的库类)
- Data Class(纯稚的数据类)
- Refused Bequest(被拒绝的遗赠)
- Comments(过多的注释)
- 当你感觉需要撰写注释时,请先尝试重构,试着让所有注释变得多余。P88
第四章 构建测试体系
- 程序员把最多时间都耗在哪里,编写代码其实只占非常小得一部分。有些时间来决定下一步干什么,另一些时间花在设计上,最多的时间则是用来调试。P89
- 一套测试就是一个强大的bug侦测器,能够大大缩减查找bug所需要的时间。P90
- 每当你收到bug报告,请先写一个单元测试来暴露bug。P97
第六章 重新组织函数
- 小函数的粒度都很小,那么函数被复用的机会就越大;其次,这会使高层函数读起来就像一系列注释;再次,如果函数都是细粒度,那么函数的覆写也会更容易些。只有当你能给小型函数很好地命名时,它们才能真正起作用。P110
Long Method(过长函数)
- Extract Method(提炼函数) P110
- 你有一段代码可以被组织在一起并独立起来,将一部分代码放进一个独立函数中,并让函数名称解释该函数的用途。
- Inline Method(内联函数) P117
- 一个函数的本体与名称同样清楚易懂。在函数调用点插入函数本体,然后移除该函数。
- Inline Temp(内联临时变量) P119
- 你有一个临时变量,只被一个简单的表达式赋值一次,而它妨碍看其他重构手法。将所有对该变量的引用动作,替换为对它赋值的那个表达式自身。
- Replace Temp with Query(以查询取代临时变量) P120
- 你的程序以一个临时变量保存某一表达式的运算结果。将这个表达式提炼到一个独立函数中。将这个临时变量的所有引用点替换为对新函数的调用。此时新函数就可被其他函数使用。
- Introduce Explaining Variable(引入解释性变量) P124
- 你有一个复杂的表达式。将该复杂的表达式(或其中的一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。
- Split Temporary Variable(分解临时变量) P128
- 你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。针对每次赋值,创造一个独立、对应的临时变量。
- Remove Assignments to Parameters(移除对参数的赋值) P131
- 代码对一个参数进行赋值。以一个临时变量取代该参数的位置。
- Replace Method with Method Object(以函数对象取代函数) P135
- 你有一个大型函数,其中对局部变量的使用使你无法采用Extract Method(提取函数)。将这个函数放进一个单独的对象中,如此一来局部变量就成了对象内的字段。然后你可以在同一个对象中将这个大型函数分解为多个小型函数。
- Substitute Algorithm(替换算法) P139
- 你想要把某个算法替换为另一个更清晰的算法。将函数本体替换为另一个算法
链接:https://www.jianshu.com/p/702f3ff2aabd