《重构》第二章学习笔记
重构的定义
作为名词形式:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本。
作为动词形式:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。
使用重构技术开发软件时,存在着两种行为状态,分别是添加新功能和重构。开发过程中,可能会经常变换状态,但是一定要清楚自己当前要做的事情。
为何重构
- 改进软件设计
- 使软件更容易理解
- 帮助找到Bug
- 提高编程速度
何时重构
重构并不是万能的,但是却可以始终良好的控制自己的代码。
- 三次法则:事不过三,三则重构。
- 添加功能时重构
- 修补错误时重构
- 复审代码时重构
重构的难题
数据库
大多数商业程序和数据库接口耦合度高,数据库结构和数据模型之间相互依赖。可以在对象模型和数据库模型之间插入一个分割层,虽然会提升系统的复杂度,但是带来更高的灵活度。
修改接口
如果重构改变了已发布的接口,就必须要同时维护新旧两个版本的接口,直到确定所有用户都能够切换到最新的版本。
- 难以通过重构手法完成的设计改动
何时不该重构
代码过于混乱
有时候代码过于混乱,重构还不如直接重写省时省力。
现有代码无法正常运作
重构代码前,代码知道能够在大部分情况下正常运行。
项目接近最后的期限
重构能够提高生产力,如果最后没有足够的时间,一般说明早该进行重构。
重构与性能
三种性能提升法
时间预算法
通常只适用于性能要求极高的实时系统,使用这种方法,在分解设计时就要做好预算,给每个组件预先分配一定的资源包括时间和执行轨迹,每个组件不能超过自己的时间预算,就算拥有组件之间调度预配时间的机制也不行。
持续关注法
在做任何事情时都要设法保持系统的高性能。
利用程序分析的统计数据
编写构造良好的程序,不对性能投以特别的关注,直至进入性能优化阶段。一旦进入该阶段,再按照某个特定程序来调整程序性能。在性能优化阶段使用一个度量工具来监控程序的运行,查找出程序中大量消耗时间和空间的地方,然后集中关注这些地方。每次都只进行小幅度的修改,如果没能提高性能,就应该撤销这个更改,持续这个流程,直到能够达到客户满意的性能。
重构可以帮助我们写出更快的软件,短期来看,重构的确有可能使软件变慢,但在优化阶段可以更容易的调整软件性能,长远上还是会得到好的效果。