一、什么是重构?
1. 定义
书中将重构定义为两种类型:名词、动词
重构(名词):是对软件内部结构的一种调整、目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
这句话的意思其实就是说我们在不改变原有功能的基础上对代码做一些修改,使其更易于理解易于维护。
重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。
这句话其实就是说我们在不改变原有功能的基础上,我们调整代码结构时所做的操作。
2. 做重构时要注意什么?
我们在重构时,会运用一些微小且保持代码行为的步骤,来一步步达成大规模的修改,每个单独的重构要么很小,要么有很多小的步骤组合而成。而且我们在做重构的过程中,我们的项目还是完全可以正常工作的。
3.重构与性能优化的区别?
相同点:
- 两者都需要修改代码
- 两者都不会改变程序的整体功能
不同点:
- 重构是为了让代码更容易理解,更易于修改,在改的过程中可能会使代码运行的快,也可能会使代码运行的慢。
- 在性能优化时,我们只关系让程序运行的更快,最终得到的代码有可能更难理解和维护。
二、两顶帽子
我们在使用重构技术在开发时,我们的时间分配给两种截然不同的行为:添加新功能和重构。
- 当我们带上添加新功能的帽子时,我们的关注点就应该只在添加新的功能,我们不应该修改既有的代码。
- 当我们带上重构的帽子时,我们关注点就应该只在调整代码结构,此时不应该添加任何测试,并且也不会轻易修改测试(特殊情况除外)。
三、为什么要重构?
1. 重构改进软件的设计
重构代码有助于我们维护代码本身该有的形态:如果人们不去经常重构代码,程序内部的设计就会慢慢变质,因为当人们为了短期目的对代码进行修改后,由于没有完全理解代码原来的设计,就会让代码失去自己的结构。
重构代码还有助于我们消除重复的代码,减少代码量,虽然有时间代码量的减少并不能提升代码的性能,但是代码量的减少会使未来可能的程序修改变得容易多,因为代码越多,在做修改时需要理解的代码就越多。
2. 重构使代码更容易理解
程序设计不单单是我们与程序之间的交互,还有与其他读者或者团队中其他开发者之间的交互,你设计的代码,可能在未来会有其他人来做一些修改,如果我们代码容易理解,他能够在很短的时间内做出修改,很多时候,未来修改的人还可能是我们自己,当代码不易于理解时,你自己过段时间后再来修改,会发现因为之前的代码没有及时重构,现在的修改就会变得不容易进行。
3. 重构帮助我们找到bug
重构能使得我们的代码易于理解,当我们的代码易于理解时,我们就可以深入理解代码的所作所为,搞清楚代码结构的同时,也会将代码中的bug及时发现。
4. 重构提高编程速度
很多人有疑问,我们在做重构时,很容易看出它能够提高代码质量,改善设计,提高可读性,减少bug这些都是提高质量。花时间在重构难道不是在降低开发速度吗?
其实不然,我们在一个大的系统上工作较长时间后会发现,如果软件内部质量高,在后期添加新功能的时候就会很容易,花费的时间就会少。但是当一个软件内部质量底时,前期做的时候可能会感觉速度很快,但是慢慢当系统变大后,就会发现,后期添加一个新功能需要的时间就会长得多。
书中将这种现象称为 “设计耐久性假说”:通过投入精力改善代码内部设计,我们增加了软件的耐久性,从而可以更长时间的保持开发速度。