重构原则

何谓重构

名词:对软件内部结构的一种调整,目的是在不改变软件可观察的行为下,提高理解,降低修改成本。
动词:使用一些列重构手法,在不改变软件行为下,调整结构。
性能优化的区别
重构:为了让代码“更容易理解,更容易修改”
性能优化:让程序运行更快,有可能代码更难理解和维护

添加功能与重构

在开发时需要保持这两顶帽子的独立行 ;
添加新功能,就仅仅添加新功能,而不是想到重构;
重构时不能添加新功能,只管调整代码结构。

重构的优点

  1. 改进软件设计
  2. 使软件更容易理解
  3. 帮助找到bug
  4. 提高编程速度

    何时重构

    三次法则

  5. 做某件事时只管去做

  6. 做类似的事会产生反感,但还可以去做
  7. 再做类似的,就可以去重构了

    预备重构

    让添加新功能更容易,在添加新功能之前,会查看有的代码;如果容易修改,就可以重构

    捡垃圾式重构

    如果发现的坏代码很容易重构,就会马上重构它;
    如果需要花一些精力,就可以标记,下次重构它们;

    长期重构

    不要专门的时间或者团队去做重构,而是让整个团队达成共识,在未来的时间里逐步解决问题;每当有人靠近重构,就推进一点;这样的好处是,不会破坏代码,每次小改动之后,容易测试并且使整个系统仍然照常工作。

    复审代码时

    何时不重构

  8. 不需要使用,修改它

  9. 容易理解的代码
  10. 重写比重构容易,简单

    重构的挑战

    延缓新功能开发

    需要有权衡取舍时间;

  11. 如果添加的功能非常小,这时会选择添加功能

  12. 遇见多次问题或代码,可以重构

重构的意义不在把代码打磨得很好,而是站在经济角度出发

代码所有权

鼓励代码可以修改;相关负责的代码块的开发者选择合并,其他开发者可以提交代码分支;

测试

每次重构;都需要严格的进行测试;

重构架构和YAGNI

应对未来变化,就是在软件里植入灵活性机制,但引入此机制,会增加系统的复杂性;所以只有当未来重构很困难时,才可以考虑添加灵活性。可以是,增量式、渐进式的;
采取YAGNI:“你不会需要它”;并不是完全不考虑,而是让问题更加显示出来,对问题理解更加充分,再着手解决。