概述
《重构 改善既有代码的设计》读书笔记及心得体会
第一章 重构 第一个案例
- 重构的第一步,为即将修改的代码建立一组可靠的测试环境。
- 过程和方法对于项目的结果只有次要的影响,首要的影响是人
没有可靠的测试环境就不要进行代码的重构,那么问题来了:
- 什么是可靠的测试环境? 在第四章给出回答
- 重构时,每次修改的幅度要小,这样便于进行测试发现错误。
这是本书中贯穿始终的一个重构经验,每天重构一点,每次修改一点,修改的步伐一定小,修改后进行编译测试。
- 任何一个傻瓜都能写出计算机可以里的代码,唯有写出人类 容易 理解的代码才是优秀的程序员
代码首先是给人阅读的,其次才是让计算机运行的。
所以首要是写出易于人理解的代码,然后再去考虑性能等因数。
- 重构的节奏
测试-> 小修改-> 测试-> 小修改-> 测试-> 小修改-> 测试-> 完成
- 如何快速安全的进行重构
while(重构){
测试();
小修改();
}
第二章 重构原则
本章着重论述重构的概念
What
视上下文的不同,重构有两种定义
1.名词形式定义:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
2.动词形式定义:使用一系列重构的手法,在不改变软件可观察行为的前提下,调整其结构。
这里重点是“不改变软件可观察行为的前提下”,不应该在重构时添加新功能和修改发现的代码错误。同时进行功能维护和代码维护容易引入新的bug。
个人认为在重构时,很容易随手修改发现的功能错误
遇到这种情况时,作者给出的建议是:
重构时有了新想法、发现新错误,就在旁边记录下来,重构后再进行功能上的维护。
这被比喻为“两顶帽子”:添加新功能 和 重构
添加新功能时,你不应该修改既有代码,只管添加新功能。通过测试,你可以衡量自己的工作进度。
重构时你就不能再添加新功能,只管改进程序结构,只在绝对必要是才修改测试。
Why
1.重构改进软件设计
2.重构是软件更容易理解
3.重构帮助找到Bug
4.重构提高编程速度
个人体会,重构的好处一定是在进行重构以后才能体会出来的,找出一大段代码(大约十来个类),一点一点的重构。做完一遍,体会一下;做完一遍,体会一下;重构的好处,爱在心口难开。
When
作者反对拨出专门时间进行重构,它本身就不是意见应该拨出时间做的事情,重构应该随时随地地进行,不应该为了重构而重构。
三次法则: 事不过三,三则重构
第一次做某事只管去做;第二次做类似的事,虽然会反感但也可勉强去做;第三次再做类似的事,你就该重构了。
可以进行重构的三个时间点:
添加新功能时重构。
给软件添加新特性的时候,重构帮助我理解需要修改的代码修补错误时重构。
调试过程中重构,让代码更具有可读性,加深理解,找出Bug。复审代码时重构。
重构帮助我复审别人的代码。极限编程中的“结对编程”,把代码复审的积极性发挥到了极致。
How
“该怎么对经理说重构的事”
对于“质量驱动”型的经理:
在复审过程中使用重构是一个不错的办法。
随便找一本关于复审、审查或者软件开发的书看看,从中找出最新引证,应该可以让大多数经理认识复审的价值对于“进度驱动”型的经理:
我的建议是: 不告诉他。经理要我尽快完事,至于怎么完成,那就是我的事了。我认为最快的方式就是重构,所以我就重构喽 ^-^
Difficult
重构是有局限性的,不能盲目的进行重构
数据库重构
- 绝大多数的商用程序都与其背后的数据库结构紧密耦合
- 无论多么小心的进行系统分层,降低耦合度,数据库结构的改变还是让你不得不进行漫长且繁琐的数据迁移工作(migration)
接口重构
对于已经发布的接口(published interface),无法仅仅修改调用者就能安全的修改接口。你必须同时维护新旧两个接口,幸运的是,这并不难,让旧接口调用新接口。同时,使用Java提供的deprecation或者C#中的Obsolete标记旧接口。
难以通过重构完成设计的改动
重构是进行改良,如果从根部就错了,还是推倒重来把
Not to do
何时不该重构
- 既有代码太混乱,重构不如重写
做出这种决定很困难,没有什么好的标准可以判断何时应该放弃重构。
重写有一个清楚的信号,现有代码根本能不正常运行,代码里面满是错误,无法稳定运行。
记住,重构前代码必须能够在大部分情况下正常运行
- 项目临期
如果项目已接近最后期限,你应避免重构。
Other
重构与设计
重构肩负一项特殊使命,它与设计彼此互补。软件比起机器,其可塑性更强而且完全是思想产品。有了重构,你仍然可以座预先设计,但是不必一定找到正确的解决方案,随着对问题理解的加深,解决方案也会变动,重构使得日后的修改成本不在高昂。
重构可以带来更简单的设计,同时又不损失灵活性,降低了设计过程的难度,减轻了设计的压力重构与性能
重构对程序的性能将造成怎样的影响?
- 首先作者不赞成:为了提高设计的纯洁性而忽视性能。虽然重构可能使得软件运行更慢,但它也使得软件的性能优化更容易。
- 除了实时系统,其他任何情况下“编写快速软件”的秘密就是:
首先写出可调的软件,然后调整它以求获得足够的速度。
三种编写快速软件的方法:
1.时间预算法
2.持续关注法
3.性能提升法
一件有趣的事:
- 对大多数程序进行分析,就会发现它大部分时间消耗在一小部分代码上。
- 一视同仁的优化代码,90%的优化工作都是白费劲,因为大多数你优化的代码很少被执行
所以优化性能需要先使用一个度量工具来监控程序的运行,找出程序中哪些地方大量消耗时间和空间。然后在集中关注这些性能热点。
To Be Continued…
最后
以上就是大意树叶为你收集整理的《重构 改善既有代码的设计》读书笔记及心得体会第一章 重构 第一个案例第二章 重构原则的全部内容,希望文章能够帮你解决《重构 改善既有代码的设计》读书笔记及心得体会第一章 重构 第一个案例第二章 重构原则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复