前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重构:改善既有代码的设计 读书笔记- 重构的原则

重构:改善既有代码的设计 读书笔记- 重构的原则

作者头像
luciozhang
发布2023-04-22 16:45:00
3390
发布2023-04-22 16:45:00
举报
文章被收录于专栏:前端lucio

什么是重构

什么是重构

在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。

重构对性能的影响

重构不是代码优化,重构注重的是提高代码的可理解性与可扩展性,对性能的影响可好可坏。

评估是否需要重构

如果需要给程序添加特性,但因为代码缺乏良好结构而难以更改,那可以先重构使其易于修改。

需求的变化使重构必要,如果代码正常运行,不会再被修改,那完全可以不去重构。

重构的第一步

确保即将修改的代码拥有一组可靠的测试

重构的过程

分小步走,每修改一小步,重新编译、测试、提交。

营地法则

保证你离开时的代码库一定比来时更健康。

重构的原则

理解重构

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

重构的关键在于运用大量微小且保持软件行为的步骤,一步步达成大规模的修改。

两顶帽子

代码开发过程中两种截然不同的行为,添加新功能重构

不应该经常变换帽子,每次只应该专注于其中一项工作。

为何重构

重构改进软件的设计

如果没有重构,程序的内部设计(或者叫架构)会逐渐腐败变质。

当人们只为短期目的而修改代码时,他们经常没有完全理解架构的整体设计,于是代码逐渐失去了自己的结构。

代码结质量的变质具有累计效应、破窗效应

重构使软件更容易理解

合理的重构能让代码“自解释”

比让计算机读懂代码更难的是,让“人”读懂代码。

重构帮忙找到bug

深入理解代码的所作所为,并立即把新的理解反映在代码当中,在这个过程中,bug自然会被发现。

重构提高编程速度

不同质量的设计,随着功能累计,添加新功能所需的时间。

需要添加新功能时,内部质量良好的软件让我可以很容易找到在哪里修改、如何修改。良好的模块划分使我只需要 理解代码库的一小部分,就可以做出修改。如果代码很清晰,我引入bug的可能 性就会变小,即使引入了bug,调试也会容易得多。理想情况下,我的代码库会逐步演化成一个平台,在其上可以很容易地构造与其领域相关的新功能。

“设计耐久性假说”:通过投入精力改善内部设计,我们增加了软件的耐久性,从而可以更长时间地保持开发的快速。

何时重构

见机行事的重构

预备性重构:让添加新功能更容易

重构的最佳时机就在添加新功能之前。

帮助理解的重构:使代码更易懂

当代码难以理解,使用重构来帮助理解。

捡垃圾式重构

在日常开发过程中,对不好的实现,通过重构进行清理。

项目计划上没有专门留给重构的时间,绝大多数重构都在做其他事(添加新功能或者修复bug)的过程中自然发生。

优秀的程序员知道,添加新功能最快的方法往往是先修改现有的代码,使新功能容易被加入。

有计划的重构

问题在某个区域逐渐累积长大,最终需要专门花些时间来解决。

分离重构和添加新功能的提交是比较有益的工作方式。

大规模的重构只在必要的时候进行,更推荐的方法还是随时随地重构工作相关的代码。

Branch By Abstraction

如果要替换掉一个正在使用的库,先引入抽象层,兼容新旧两个库的接口

Code Review时重构

和原作者一起结对编程,通过CR过程中提出的重构建议,提高代码的质量。

何时不应该重构

  • 代码不需要被理解和修改时。
  • 重写比重构容易时。

重构的挑战

延缓新功能开发?

重构的唯一目的就是让我们开发更快,用更少的工作量创造更大的价值。

有时候需要取舍,添加的功能很小但是需要做很大规模的重构时,可以先添加新功能。

代码所有权

推荐团队代码所有制,而不是细粒度的强代码所有制。

版本控制问题

如何解决在隔离的分支,集成回主线,需要解决大量冲突的问题。

采用持续集成(CI),基于主干开发的方法,每天至少向主线集成一次,确保主线随时处于健康状态。

测试

“不会改变程序可观察的行为”,要求代码应该有一套完备的测试套件,并且运行速度要快,能在一步小的重构后,马上验证程序的正确性

重构、架构和YAGNI

一开始就完成完美的架构设计是不可能的,当拥有重构的时候,我们可以做简单设计(也称增量式设计或者YAGNI)

只根据当前的需求来构造软件,同时把软件的设计质量做得很高。随着对用户需求的理解加深,我会对架构进行重构,使其能够应对新的需要。

重构与软件开发过程

敏捷开发的三大实践

  • 自测试代码
  • 持续集成
  • 重构

重构与性能

短期看来,重构的确可能使软件变慢,但它使优化阶段的软件性能调优更容易,最终还是会得到好的效果。

性能优化的过程:度量->发现性能热点->去除热点

大多数程序的性能都消耗在一小部分的代码上,要先对程序有清楚的理解,不要通过臆想进行性能优化

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是重构
    • 什么是重构
      • 重构对性能的影响
        • 评估是否需要重构
          • 重构的第一步
            • 重构的过程
              • 营地法则
              • 重构的原则
                • 理解重构
                  • 两顶帽子
                    • 为何重构
                      • 重构改进软件的设计
                      • 重构使软件更容易理解
                      • 重构帮忙找到bug
                      • 重构提高编程速度
                    • 何时重构
                      • 见机行事的重构
                      • 预备性重构:让添加新功能更容易
                      • 帮助理解的重构:使代码更易懂
                      • 捡垃圾式重构
                      • 有计划的重构
                      • Branch By Abstraction
                      • Code Review时重构
                    • 何时不应该重构
                      • 重构的挑战
                        • 延缓新功能开发?
                        • 代码所有权
                        • 版本控制问题
                        • 测试
                      • 重构、架构和YAGNI
                        • 重构与软件开发过程
                          • 敏捷开发的三大实践
                          • 重构与性能
                      相关产品与服务
                      持续集成
                      CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档