《重构 改善既有代码的设计》读书笔记及心得体会

《重构 改善既有代码的设计》读书笔记及心得体会

第一章 重构 第一个案例

  • 重构的第一步,为即将修改的代码建立一组可靠的测试环境。
  • 过程和方法对于项目的结果只有次要的影响,首要的影响是人

没有可靠的测试环境就不要进行代码的重构,那么问题来了:
- 什么是可靠的测试环境? 在第四章给出回答

  • 重构时,每次修改的幅度要小,这样便于进行测试发现错误。

这是本书中贯穿始终的一个重构经验,每天重构一点,每次修改一点,修改的步伐一定小,修改后进行编译测试。

  • 任何一个傻瓜都能写出计算机可以里的代码,唯有写出人类 容易 理解的代码才是优秀的程序员

代码首先是给人阅读的,其次才是让计算机运行的。
所以首要是写出易于人理解的代码,然后再去考虑性能等因数。

  • 重构的节奏
 测试-> 小修改-> 测试-> 小修改-> 测试-> 小修改-> 测试-> 完成
  • 如何快速安全的进行重构
while(重构){
    测试();
    小修改();
}

第二章 重构原则

本章着重论述重构的概念

What

视上下文的不同,重构有两种定义

1.名词形式定义:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

2.动词形式定义:使用一系列重构的手法,在不改变软件可观察行为的前提下,调整其结构。

这里重点是“不改变软件可观察行为的前提下”,不应该在重构时添加新功能和修改发现的代码错误。同时进行功能维护和代码维护容易引入新的bug。

个人认为在重构时,很容易随手修改发现的功能错误

遇到这种情况时,作者给出的建议是:
重构时有了新想法、发现新错误,就在旁边记录下来,重构后再进行功能上的维护。
这被比喻为“两顶帽子”添加新功能重构

扫描二维码关注公众号,回复: 13386824 查看本文章

添加新功能时,你不应该修改既有代码,只管添加新功能。通过测试,你可以衡量自己的工作进度。
重构时你就不能再添加新功能,只管改进程序结构,只在绝对必要是才修改测试。

Why

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

个人体会,重构的好处一定是在进行重构以后才能体会出来的,找出一大段代码(大约十来个类),一点一点的重构。做完一遍,体会一下;做完一遍,体会一下;重构的好处,爱在心口难开。

When

作者反对拨出专门时间进行重构,它本身就不是意见应该拨出时间做的事情,重构应该随时随地地进行,不应该为了重构而重构。

三次法则: 事不过三,三则重构

第一次做某事只管去做;第二次做类似的事,虽然会反感但也可勉强去做;第三次再做类似的事,你就该重构了。

可以进行重构的三个时间点:

  1. 添加新功能时重构。
    给软件添加新特性的时候,重构帮助我理解需要修改的代码

  2. 修补错误时重构。
    调试过程中重构,让代码更具有可读性,加深理解,找出Bug。

  3. 复审代码时重构。
    重构帮助我复审别人的代码。极限编程中的“结对编程”,把代码复审的积极性发挥到了极致。

How

“该怎么对经理说重构的事”

  • 对于“质量驱动”型的经理:

    在复审过程中使用重构是一个不错的办法。
    随便找一本关于复审、审查或者软件开发的书看看,从中找出最新引证,应该可以让大多数经理认识复审的价值

  • 对于“进度驱动”型的经理:

    我的建议是: 不告诉他。经理要我尽快完事,至于怎么完成,那就是我的事了。我认为最快的方式就是重构,所以我就重构喽 ^-^

Difficult

重构是有局限性的,不能盲目的进行重构

  • 数据库重构

    1. 绝大多数的商用程序都与其背后的数据库结构紧密耦合
    2. 无论多么小心的进行系统分层,降低耦合度,数据库结构的改变还是让你不得不进行漫长且繁琐的数据迁移工作(migration)
  • 接口重构

    对于已经发布的接口(published interface),无法仅仅修改调用者就能安全的修改接口。你必须同时维护新旧两个接口,幸运的是,这并不难,让旧接口调用新接口。同时,使用Java提供的deprecation或者C#中的Obsolete标记旧接口。

  • 难以通过重构完成设计的改动
    重构是进行改良,如果从根部就错了,还是推倒重来把

Not to do

何时不该重构

  • 既有代码太混乱,重构不如重写

    做出这种决定很困难,没有什么好的标准可以判断何时应该放弃重构。


重写有一个清楚的信号,现有代码根本能不正常运行,代码里面满是错误,无法稳定运行。

记住,重构前代码必须能够在大部分情况下正常运行

  • 项目临期
    如果项目已接近最后期限,你应避免重构。

Other

  • 重构与设计

    重构肩负一项特殊使命,它与设计彼此互补。软件比起机器,其可塑性更强而且完全是思想产品。有了重构,你仍然可以座预先设计,但是不必一定找到正确的解决方案,随着对问题理解的加深,解决方案也会变动,重构使得日后的修改成本不在高昂。
    重构可以带来更简单的设计,同时又不损失灵活性,降低了设计过程的难度,减轻了设计的压力

  • 重构与性能

    重构对程序的性能将造成怎样的影响?

    1. 首先作者不赞成:为了提高设计的纯洁性而忽视性能。虽然重构可能使得软件运行更慢,但它也使得软件的性能优化更容易。
    2. 除了实时系统,其他任何情况下“编写快速软件”的秘密就是:

    首先写出可调的软件,然后调整它以求获得足够的速度。

三种编写快速软件的方法:

1.时间预算法
2.持续关注法
3.性能提升法

一件有趣的事:

  • 对大多数程序进行分析,就会发现它大部分时间消耗在一小部分代码上。
  • 一视同仁的优化代码,90%的优化工作都是白费劲,因为大多数你优化的代码很少被执行

所以优化性能需要先使用一个度量工具来监控程序的运行,找出程序中哪些地方大量消耗时间和空间。然后在集中关注这些性能热点。


To Be Continued…

猜你喜欢

转载自blog.csdn.net/awp0011/article/details/50432877
今日推荐