关于代码重构你应该知道的内容

简介: 关于代码重构你应该知道的内容

1 什么叫做重构

重构是在不改变软件可观察行为的前提下改善其内部结构, 重构的本质就是在代码写好之后改进它的设计

2 为什么要进行代码重构

  • 如果没有重构,程序的设计会逐渐 腐败变质
  • 重构使软件 更容易理解,通过重构代码来协助开发人理解不熟悉的代码
  • 如果对代码进行重构,就可以深入理解 代码的行为,重构帮助找到 隐藏BUG
  • 完成同样一件事,设计不良的程序往往需要 更多的代码,这通常是因为代码在不用的地方使用完全相同的语句去做同样的事
  • 归结为一点的话那就是:重构帮助你更快速的开发程序

在这里插入图片描述

3 何时重构

应该怎样安排重构时间表。是不是应该每两个月就专门安排两个星期来进行重构呢?

作者提出的意见是:几乎任何情况下都反对专门拨出时间进行重构。重构本来就不是一件应该特别拨出时间来做的事情,重构应该随时随地进行不应该为重构而重构,你之所以重构,是因为你想做别的什么事,而重构可以帮助你把那些事做好

3.1 三次法则

第一次做某件事时只管去做;第二次做类似的事会产生方案,但无论如何还是可以去做;第三次再做类似的事,你就应该重构

简单理解:事不过三,三则重构

3.2 添加功能时重构

  • 最常见的重构时机就是我想给软件添加 新特性 的时候。此时,重构的直接原因往往是为了帮助我理解需要修改的代码 - 这些代码可能是别人写的,也可能是我自己写的
  • 无论何时,只要我想 理解代码所做的事,我就会问自己:是否能够对这段代码进行重构,使我能更快地理解它。然后我就会重构
  • 之所以这么做,部分原因是为了让我 下次再看 这段代码时容易理解。但最主要的原因是如果再前进过程中把 代码结构理清,我就可以从中理解更多东西

3.3 修补错误时重构

调试过程中运用重构,多半是为了让代码更具有可读性

3.4 复审代码时重构

  • 很多公司都会做常规的 代码复查,因为这种活动可以改善开发状况
  • 代码复查对于 编写清晰代码 也很重要。我的代码也许对于我自己来说很清晰,对他人则不然
  • 针对与代码复查,个人觉得是很有必要的,可以通过 review 来对代码的 坏味道、个人不好的编码习惯及优化点 做出改良

4 何时不该重构

  • 有时候你根本 不应该重构,例如当你应该重新编写所有代码的时候。有时候既有代码 实在太混乱,重构它还不如 重新写 一个来的简单
  • 重写 (而非重构)的一个清楚讯号就是:现有代码根本不能正常运作。你可能只是试着做点测试,然后就发现代码中满是错误,根本 无法稳定运作。记住,重构之前,代码必须起码能够大部分情况下正常运作
  • 另外在项目已经最后期限,你也应该避免重构。在此时机,从重构过程赢得的生产力只有在最后期限过后才能体现出来,而那个时候已经 为时晚矣
  • 如果项目已经非常接近最后期限,你不应该再 分心于重构,因为已经没有时间了。不过多个项目经验显示:重构的确能够提升生产力。如果最后你没有足够时间,通常就表示你其实 早就该进行重构

5 重构与设计

  • 重构肩负一项特殊使命:它和设计彼此互补。初学编程时候,我埋头就写程序,浑浑噩噩地进行开发。然后很快我便发现:事先做好设计可以让我节省返工的高昂成本
  • 有一种观点认为:重构可以取代预先设计。这意思就是你根本不需要做任何设计,只需按照最初想法开始编码,让代码有效运作,然后再将它 重构成型。事实上这种办法真的可行。的确有人这么做,最后获得设计良好的软件。极限编程[Beck,XP]的支持者极力提倡这种办法
  • 尽管如上所言,只运用重构也能收到效果,但这 并不是最有效的途径。是的,就连极限编程的爱好者们也会进行预先设计。关键在于:重构改变了预先设计的角色。如果没有重构,你就必须保证预先做出的设计正确无误,这个压力太大了。

如果你选择重构,问题的重点就转变了。你仍然预先设计,但是不必一定找出正确的解决方案。此时的你只需要得到一个足够合理的解决方案就够了

  • 这种转变导致一个重要结果:软件设计向简化 前进了一大步。过去未曾运用重构时,总是力求得到灵活的解决方案。任何一个需求都提心吊胆地猜疑:在系统的有生之年,这个需求会导致怎样的变化?由于 变更设计的代价非常高昂,所以我希望建造一个 足够灵活、足够可靠 的解决方案,所需的成本难以估算
  • 有了重构,你就可以通过一条不同的途径来应对变化带来的风险。你 仍旧需要思考潜在的变化依旧需要考虑灵活 的解决方案。但是你不必再逐一实现这些解决方案,而是应该问问自己:“把一个简单的解决方案重构成这个灵活的方案有多大的难度?”如果答案是“相当容易”(大多数时候都如此),那么你就只需要实现目前的简单方案就行了
  • 重构可以带来更简单的设计,同时又 不损失灵活性,这也 降低了设计过程的难度减轻了设计压力。一旦对重构带来的简单性有更多感受,你甚至可以不必再预先思考前述所谓的灵活方案,一旦需要它,你总有足够的信心去重构。是的,当下只管建造可运行的最简化系统,至于灵活而复杂的设计,唔,多数时候你都不会需要它

6 金玉良言

懒惰是程序员的美德之一,绝不要因为《重构改善既有代码的设计》让你变得勤快

在设计前期使用设计模式常常导致过度工程,良好的程序设计是维持软件开发速度的根本

以重构方式改进软件质量

重构有风险,修改需谨慎

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

相关文章
|
5天前
|
算法 程序员 Python
如何写出优美整洁的代码
【4月更文挑战第5天】 编写优美整洁的代码能提升可读性、可维护性和开发效率。遵循命名规范,如使用小写字母和下划线命名变量,驼峰命名法命名函数和类。适当注释代码,但避免过度注释。避免冗余代码,通过函数封装重复逻辑。使用空格和缩进增强代码可读性,遵循PEP 8编码规范。利用异常处理机制处理错误,保持代码简洁。
16 0
|
5天前
|
前端开发 测试技术
代码注释怎么写:让你的代码更易维护
在编程中,有一种无声的艺术,那就是代码注释。这可能看起来微不足道,但其实非常关键。它不仅有助于他人理解你的代码,也是自我表达的一种方式。
|
6月前
代码规范:程序的版式
空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。
62 0
|
7月前
|
人工智能 自然语言处理 Java
提高代码可读性的秘诀:注释的重要性
A:你写代码怎么连注释都不加? B:老大为什么要加注释? A:你不加注释,你怎么知道我能看懂你的代码? B:遇到问题你找到就可以了啊? A:那你哪天生病了请假了闹情绪了离职了,公司怎么办? B:我现在反正没觉得有什么问题,我对公司也很满意,安心啦! 又是00后整顿职场的一段精彩演绎。不可置否,在实际的软件开发过程中,确实有很多开发人员依然不愿意写注释认为这会浪费时间,或者自认为他们的代码足够清晰,不需要额外的解释。但这种想法too young too simple,代码注释对于项目的质量和效率有着深远的影响,在软件开发中的重要性不容小觑。
|
敏捷开发 测试技术 数据安全/隐私保护
如何写出整洁的代码 下
如何写出整洁的代码 下
|
消息中间件 设计模式 JavaScript
如何写出整洁的代码 上
如何写出整洁的代码 上
花五分钟把代码注释也规范一哈子?
从技术上来说没有对错,理论上,你想怎么写就怎么写,你爱怎么写就怎么写! 但它确实也会对我们造成影响,尤其是在多人协同开发的系统中。杂乱的注释也会让你或你的队友头疼~ 所以,我们需要规范一下注释。那什么才是好的注释呢?我们先来看看什么是不好的注释!
|
开发者
重构的核心-让代码保持整洁
很久之前团队师兄向我推荐了《重构:改善既有代码的设计》这本书,粗略翻阅看到很多重构的细节技巧,但当时还处于未接触过工程代码,只关注代码功能,不太考虑后期维护的阶段,读起来觉得枯燥无味,几乎没有共鸣,一直没有细细阅读。在工作一年后,终于在师兄的督促下,利用一个月左右的早起时光读完了这本书,收获很多,感谢师兄的督促,感谢这本书陪伴我找回了阅读习惯。把这本书推荐给已经接触了工程代码、工作一年左右的新同学,相信有了一定的经验积累,再结合日常项目实践中遇到的问题,对这本书的内容会有很多自己的思考感悟
40562 4
重构的核心-让代码保持整洁
|
设计模式 自然语言处理 程序员
一场关于代码注释的争执,引发的三点思考
在一次研发沟通会上,大家关于是否需要代码注释做了一番争执(讨论)。
一场关于代码注释的争执,引发的三点思考
|
架构师 uml 测试技术