《重构》读书笔记

第二章 重构原则
该章主要从理论说明重构原则和重构的好处

重构:使用一系列手法,在不改变软件可观察行为的前提下调整其结构
重构的目的是使软件更容易理解和修改
添加新功能与重构需要分开进行
重构改变软件设计,使软件更容易理解,有助于找到bug,提升编程速度
关于何时重构可以遵从三次法则:第一次只管做,第二次做同样的事就要注意,到第三次再做同样的事就需要重构。事不过三,三则重构。
最常见的重构时机就是想给软件添加新功能的时候。尤其是当代码的设计无法使自己添加新功能的时候。“如果用某种方式设计,添加特性会简单许多”。
第二个重构时机就是修复bug的时候,让代码更具有可读性,帮助找到bug,当不能快速找到bug时就是需要重构的信号。
第三个重构的时机就是代码复审的时候。(尤其是别人看自己代码的时候,会提出一些结构的改进,亲测有效)
系统当下的行为,只是整个软件的的一部分,如果没有认清这一点,你无法长期从事编程工作。如果你只为求完成今天的任务而不择手段,导致不可能在明天完成明天的任务,那么最终还是会失败。但是,你知道今天需要什么,却不一定知道明天需要什么。(程序需要便于添加与修改,为未来考虑)
需要重构的代码:1.难以阅读,2.逻辑重复, 3.添加新行为时需要修改已有代码,4.带复杂条件逻辑
希望代码:1.更容易阅读,2.所有逻辑都只在唯一地点指定,3.新的改动不会危及现有的行为,4.尽可能简单的表达条件逻辑

间接层的好处:1.允许逻辑共享(函数多次被调用),2.分开解释意图和实现(每个函数的名字来解释他的意图),3.隔离变化(修改它不影响别的代码),4.封装条件逻辑(降低代码重复,增加清晰度)

修改接口尽量让旧接口继续工作,让旧接口调用新接口,这样就不用修改别处。修改函数也是这同样

将大块功能重构为封装良好的小型组件,就可以逐一对组件做出重建或重构。
如果项目接近最后期限,就不应该重构,因为已经没时间了。这表示其实你早该进行重构。

事先做好设计可以节省返工的成本。设计是开发的关键环节,编程只是机械式的低级劳动。软件的可塑性更强。除此之外,你也必须理解如何修改设计。

关于性能,程序的大半时间都耗费在一小半代码身上,如果一视同仁的修改所有代码,90%的优化工作都是白费的,因为被优化的代码大多很少被执行,如果缺乏对程序的清楚认识,那么用来优化性能的时间都被浪费了。

三种编写快速软件的方法:
1.时间预算法,通常只用于性能要求极高的实时系统。分解你的设计时就要做好预算,给每个组件预先分配一定的资源----包括时间和执行轨迹。每个组件不能超出自己的预算。这种方法高度重视性能。(心律调节器等项目)
2.持续关注法,要求任何程序员要时刻保持系统的高性能。缺点是为了提高性能使得系统难以维护。
3.性能提升法,利用上述90%统计数据,编写构造良好的程序,不对性能投以特别的关注,直至进入性能优化阶段(通常在开发后期),到该阶段再按照某个特定的程序来调整程序性能。

在性能优化阶段,应该用一个度量工具来监控程序运行(例如Unity profiler,visual studio profiler,intel vtune amplifier XE等等),会找到程序中哪部分大量消耗时间和空间,可以找出 性能热点所在的一小段代码。应该集中关注这些性能热点,用持续关注法来优化它们。注意力集中在性能热点上,减少工作量。继续这个"发现热点,去除热点"的过程。

优秀的程序员都会花一些时间来清理自己的代码。

原文地址:https://www.cnblogs.com/yyl141/p/14941194.html