重构阅读笔记1

第一章 重构,第一个案例

  1. 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。P7
  2. 重构之前,首先检查自己是否有一套可靠的测试机制。这些测试必须有自我检验能力。P8
  3. 重构技术就是以微小的步伐修改程序。如果你犯下错误,很容易便可发现它。P13
  4. 任何一个傻瓜都能写出计算机可以理解的代码。唯有写出人类容易理解的代码,才是优秀的程序员。P15

第二章 重构原则

  1. 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。P53
  2. 重构(动词):使用一系列重构手法,在不改变可观察行为的前提下,调整其结构。P53
  3. 三次法则:事不过三,三则重构。P58

第三章 代码的坏味道

页码76
  1. 代码坏味道:P76
    1. Duplicated Code(重复代码)
    2. Long Method(过长函数):程序越长越难理解,小函数所带来的全部利益——解释能力、共享能力、选择能力。
    3. Large Class(过大的类)
    4. Long Parameter List(过长参数列)
    5. Divergent Change(发散式变化):一个类受多种变化的影响。
    6. Shotgun Surgery(散弹式修改):一种变化引发多个类相应修改。
    7. Feature Envy(依恋情结)
    8. Data Clumps(数据泥团)
    9. Primitive Obsession(基本类型偏执)
    10. Switch Statements(switch惊悚出现)
    11. Parallel Inheritance Hierarchies(平行继承体系)
    12. Lazy Class(冗赘类)
    13. Speculative Generality(夸夸其谈未来性)
    14. Temporary Field(令人迷惑的暂时字段)
    15. Message Chains(过度耦合的消息链)
    16. Middle Man(中间人)
    17. Inappropriate Intimacy()
    18. Alternative Classes with Different Interfaces(异曲同工的类)
    19. Incomplete Library Class(不完美的库类)
    20. Data Class(纯稚的数据类)
    21. Refused Bequest(被拒绝的遗赠)
    22. Comments(过多的注释)
  2. 当你感觉需要撰写注释时,请先尝试重构,试着让所有注释变得多余。P88

第四章 构建测试体系

  1. 程序员把最多时间都耗在哪里,编写代码其实只占非常小得一部分。有些时间来决定下一步干什么,另一些时间花在设计上,最多的时间则是用来调试。P89
  2. 一套测试就是一个强大的bug侦测器,能够大大缩减查找bug所需要的时间。P90
  3. 每当你收到bug报告,请先写一个单元测试来暴露bug。P97

第六章 重新组织函数

  1. 小函数的粒度都很小,那么函数被复用的机会就越大;其次,这会使高层函数读起来就像一系列注释;再次,如果函数都是细粒度,那么函数的覆写也会更容易些。只有当你能给小型函数很好地命名时,它们才能真正起作用。P110
Long Method(过长函数)
  1. Extract Method(提炼函数) P110
    • 你有一段代码可以被组织在一起并独立起来,将一部分代码放进一个独立函数中,并让函数名称解释该函数的用途。
  2. Inline Method(内联函数) P117
    • 一个函数的本体与名称同样清楚易懂。在函数调用点插入函数本体,然后移除该函数。
  3. Inline Temp(内联临时变量) P119
    • 你有一个临时变量,只被一个简单的表达式赋值一次,而它妨碍看其他重构手法。将所有对该变量的引用动作,替换为对它赋值的那个表达式自身。
  4. Replace Temp with Query(以查询取代临时变量) P120
    • 你的程序以一个临时变量保存某一表达式的运算结果。将这个表达式提炼到一个独立函数中。将这个临时变量的所有引用点替换为对新函数的调用。此时新函数就可被其他函数使用。
  5. Introduce Explaining Variable(引入解释性变量) P124
    • 你有一个复杂的表达式。将该复杂的表达式(或其中的一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。
  6. Split Temporary Variable(分解临时变量) P128
    • 你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。针对每次赋值,创造一个独立、对应的临时变量。
  7. Remove Assignments to Parameters(移除对参数的赋值) P131
    • 代码对一个参数进行赋值。以一个临时变量取代该参数的位置。
  8. Replace Method with Method Object(以函数对象取代函数) P135
    • 你有一个大型函数,其中对局部变量的使用使你无法采用Extract Method(提取函数)。将这个函数放进一个单独的对象中,如此一来局部变量就成了对象内的字段。然后你可以在同一个对象中将这个大型函数分解为多个小型函数。
  9. Substitute Algorithm(替换算法) P139
    • 你想要把某个算法替换为另一个更清晰的算法。将函数本体替换为另一个算法




链接:https://www.jianshu.com/p/702f3ff2aabd

posted on 2021-04-11 08:20  孔kk  阅读(72)  评论(0)    收藏  举报

导航