[关闭]
@huis 2017-02-23T18:06:01.000000Z 字数 1524 阅读 120

读书笔记-《重构》

读书笔记 重构


关键点

  1. 重构是在不改变软件可观察行为的前提下改善其内部结构
  2. 重构前,必须先要给即将修改的代码建立一组可靠的测试环
  3. 重构时要小步前进
  4. 重构(名词):是对软件内部结构的一种调整,目的是不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
  5. 重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。

第一章:分解并重组

  1. 找出函数内的局部变量和参数
  2. 任何不会被修改的变量都可以被当成参数传入新的函数
  3. 只有一个变量被修改则可以把它当做返回值
  4. 每次修改后,都要执行测试
  5. 绝大多数,函数应该放在它所使用的数据的所属对象内
  6. 如果旧函数是public函数,而不想修改其他类的接口,则可以采用保留旧函数的形式
  7. 临时变量可能是个问题
  8. 重构时不必担心系统性能问题,优化是才需要
  9. 最好不要再另一个对象的属性基础上运用switch语句,如果不得不使用,也应该在对象自己的数据上使用。
  10. 如果函数依赖两个对象的数据,尽可能把函数划分给可能变化的数据对象内实现
  11. 一个对象不能在生命周期内修改自己所属的类
  12. State或Strategy模式去除switch...case...和if...else...

第二章:重构原则

  1. 添加新功能时,不应该修改既有代码,只管添加新功能;重构时不能再添加新功能,只管改进程序结构,不应该添加任何测试(除非有遗漏),只有处理接口变化时才修改测试。
  2. 重构是随时随地进行,不应该为重构而重构(比如:划出一段时间专门专门做重构)
  3. 事不过三,三则重构
  4. 不要过早发布接口
  5. 如果大部分代码不能正常运作,那么此时应该是重写而不是重构
  6. 如果项目已近最后期限则应避免重构
  7. 编写快速软件的秘密是:首先写出可调的软件,然后调整它以求获得足够速度
  8. 关于性能,大部分时间耗费再小部分代码上。

第三章:代码的坏味道 --- 感觉需要读N遍才行

  1. Duplicated Code(重复代码)
    1. 情况1:同一类的两个函数含有相同的表达式
    2. 情况2:两个互为兄弟的子类内含相同的表达式
    3. 情况3:两个毫不相关的类出现重复,则考虑将一个类的重复代码提炼到独立类中,另一个类使用新类;或函数属于第三类,另两个类引用第三个类。
  2. Long Method(过长方法)
    1.函数应以其用途,而非实现手法命名
    2.循环和条件表达式尝尝是提炼的信号
  3. Large Class(过大的类)
    1. 选择类内彼此相关的变量,放到同一类中
  4. Long Parameter List(过长参数列)
  5. Divergent Change(发散式变化)?-------
  6. Shotgun Surgery(散弹式修改)?
  7. Feature Envy(依恋情结)?
  8. Data Clumps(数据泥团)?
  9. Primitive Obession(基本类型偏执)?
  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(过多的注释)

第四章--构筑测试体系

  1. 每当收到bug,先写一个单元测试暴露这个bug
  2. 测试最担心出错的部分
  3. 考虑可能出错的边界条件,集中火力
  4. 当事情被认为应该会出错时,应该检查是否抛出了预期的异常
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注