《重构-改善既有代码的设计》读书笔记(一)

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

  • 重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。

  • 重构绝对不是所谓的“银弹”

  • 重构很像是在整理代码,代码结构的流失是累积性的,越难看出代码所代表的设计意图,就越难保护其中设计

  • 改进设计的一个重要方向就是消除重复代码,这个动作的重要性在于方便未来的修改,消除重复代码正是优秀设计的根本

  • 这就是重构游戏:在保持系统现有行为的前提下,如何才能提高系统的质量或降低其成本,从而使它更有价值?

  • “我不是个伟大的程序员,我只是一个有着优秀习惯的好程序员”——Kent Beck

  • 添加功能时重构(如果用某种方式来设计,添加特性会简单的多),修补错误时重构(代码没有清晰到让你一眼看出bug),复审代码时重构(重构可以帮助代码复审工作得到更具体的结果,用UML示意图展现设计,并以CRC卡展现情节)

  • 系统当下的行为只是整个故事的一部分,如果没有认清这一点,你无法长期从事编程工作。如果你为求完成今天的任务而不择手段,导致不可能在明天完成明天的任务,那么最终还是会失败

  • 难以阅读的程序难以修改,逻辑重复的程序难以修改,添加新行为时需要修改已有代码的程序难以修改,带复杂条件逻辑的程序难以修改。

  • 我们希望程序容易阅读,所有逻辑都只在唯一地点指定,新的改动不会危及现有行为,尽可能简单表达条件逻辑

  • 重写(而非重构)的一个清楚讯号就是:现有代码根本不能正常运作。记住,重构之前,代码必须起码能够在大部分情况下正常运作。

  • 重构肩负一项特殊使命:它和设计彼此互补。如果没有重构,你就必须保证预先做出的设计正确无误,这个压力太大了。

  • 灵活的解决方案比复杂的解决方案复杂许多,所以最终得到的软件通常也更难维护。

  • 哪怕你完全了解系统,也请实际度量它的性能,不要臆测。

  • 除了对性能有严格要求的实时系统,其他任何情况下“编写快速软件的秘密”就是:首先写出可调的软件,然后调整它以获得足够速度。

  • 优秀的程序员肯定会花一定的时间来清理/整理自己的代码。

  • 重构时一门非常重要的技术。

  • 坏味道行列中首当其冲的就是Duplicated Code. 你必须决定这个函数放在哪最合适,并确保它被安置后不会在其他任何地方出现

  • 拥有短函数的对象活得比较好,比较长。

  • 间接层所能带来的全部利益:解释能力,选择能力,共享能力——都是由小型函数支持的,小函数容易理解的真正关键在一个好名字

  • 我们应该更积极的分解函数,每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名,我们可以对一组甚至短短一行代码做这件事,哪怕替换后的函数调用动作比函数自身还长,只要函数名称能够解释其用途,关键在于函数“做什么”和“如何做”之间的语义距离

  • 条件表达式和循环常常也是提炼的信号

  • 和“太多实例变量”一样,类内如果有太多代码,也是代码重复/混乱并最终走向死亡的源头

  • 太长的参数列难以理解,太多参数会造成前后不一致,不易使用,而且一旦你需要更多数据,就不得不修改它

  • 将总是一起变化的东西放在一块

  • 对象的一个极大的价值在于:他们模糊(甚至打破)了横亘于基本数据和体积较大的类之间的界限。

  • 面向对象程序的一个最明显的特征就是:少用switch(或case)语句,从本质上说,switch语句的问题在于重复。

  • 你也许会看到某个类接口有一半的函数都委托给其他类,这样就是过度运用,这样应直接和真正负责的对象打交道

  • 当你感觉需要撰写注释时,请先尝试重构,试着让所有注释都变得多余

  • 编写优良的测试程序,可以极大提高编程速度,即使不进行重构也一样如此

  • 确保所有测试都完全自动化,让它们自己检查测试结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值