循序渐进地代码重构

2023-10-31

对于如何进行代码重构,一直有着很多种说法。很多人都认为应该将重构代码放在backlog里。但是其实,这并不是一个理想的方法。
  在项目刚刚开始的时候,你的代码很干净。
  即使有的时候需要小小的绕一下路,但是这个时候我们可以轻松、平稳的添加功能。这个阶段一般都不会出现问题,而且由于我们比较着急,所以即使出现了一些小问题,我们也不会注意到。
  然而,随着项目做的时间变长,这些小的问题就会累计起来。这就是人们所说的“技术债务”。其本质,就是并不算特别好的代码,但是这个时候其问题还没有完全显现出来。
  但是,随着我们一直添加新功能,这些问题就会逐渐显现出来,我们不得不小心翼翼的绕开他们。
  不可避免的,我们的开发速度会被拖慢。但是为了追求速度,我们开始变得越来越不小心,不久之后,问题也会越来越多。
  这些问题会像积木一样累计起来,层层叠叠,让我们的开发速度变得更慢。虽然我们终于意识到了问题的存在,但是没有时间彻底解决它。我们只能继续小心翼翼的绕开它们。
  很快,我们会发现半数以上的代码都与那些小问题有交集,它们无时无刻不在影响我们的开发速度。直到有一天,你发现自己没法继续绕开它们。
  不得不做点事情了。我们必须要进行复杂的代码重构,让我们重新获得干净的代码。你不得不向上级申请时间进行代码重构。其实这种工作方式并不好,我们花时间去填自己以前挖的坑。而且有的时候,公司并没有让你去重构代码的时间。
  即使公司给你时间了,你也很难很好的对代码进行重构。要知道,重构代码所需的时间,往往要远高于你的预期。如果这些纷乱的代码是你用了10周写出来的,那么你很难再用10周的时间对它们进行重构。
  由此可见,这种代码重构的方式并不好。那么我们应该怎么做呢?
  很简单,那就是每遇到一个问题,就马上解决它,而不是选择绕过它。完善当前正在使用的代码,那些还没有遇到的问题,就先不要理它。在当前前进的道路上,清除所有障碍,以后你肯定还会再一次走这条路,下次来到这里的时候你会发现路上不再有障碍。软件开发就是这样。
  或许解决这个问题需要你多花一点时间。但是从长远来看,它会帮你节省下更多的时间。
  在添加新功能的时候,我们就先清理这个功能所需要的代码。花一点时间,用滴水穿石的方法逐渐清理代码,随着时间的推移,我们的代码就会越来越干净,开发速度也会越来越快。
  一段时间之后,你会发现之前所有的技术债务都不见了,所有的坑都被填平了。这种循序渐进的代码重构的好处开始显现,编程的速度明显加快
  这才是代码重构的正确打开方式!
转载于
http://kb.cnblogs.com/page/555750/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循序渐进地代码重构 的相关文章

  • 《Java基础教程案例》读书心得

    建议新入门的Java程序猿观看 书籍里面共包含 11 章内容 涵盖了Java基础的全部知识 配备了 20 个任务案例 22到思考题 这本书在我读完以后觉得还是挺不错的一本书 每章的知识点讲的还是挺详细的 最主要的还是你学过此章节的知识点后
  • 传统制造业进行转型过程当中所要面临的主要难点

    在历史上 人类经历了四次工业革命 每一次工业革命都会伴随着一个标志性事物的出现 比如蒸汽机 这标志着人类进入了蒸汽时代 这也是第一次工业革命的开始 第二次工业革命以电力的出现为代表 标志着人类进入了电力时代 以计算机的出现为代表的第三次工业
  • 使用 Kotlin Compose Desktop 实现了一个简易的"手机助手"

    1一 adbd connector adbd connector 是一个实现 adb server 和 adb daemon 之间的通信协议的库 使用 Kotlin 编写 支持 PC 端直接连接 Android 设备操作 adb 相关的指令
  • Vue命令行终端插件使用——vue-web-terminal

    今天分享一个用Vue写的网页端终端插件 可以在web页面模拟原生命令行终端实现一些高级的操作 插件地址 https github com tzfun vue web terminal npm地址 https www npmjs com pa
  • echarts两个饼图关联

    需求一开始显示两张饼图 第一张是各罪名数量的饼图 第二张是嫌疑人各文化数量的饼图 显示之后 要求点击第一个饼图的某个罪名 第二张饼图显示该罪名嫌疑人各文化数量的饼图 给第一张饼图绑定点击事件 默认传入params参数 会输出你点击的这个饼图
  • 代码启动流程

    1 新建Vue项目 vue create app 2 运行项目 yann serve 3 安装electron插件 vue add vue cli plugin electron builder 选择Electron版本 这里需要等很久 请
  • QT实现浏览器访问网页,使用QWebEngineView,支持播放mp4

    QT实现浏览器访问网页 使用QWebEngineView 支持播放mp4 参考 https blog csdn net weixin 40355471 article details 120698537 增加了调试和播放mp4的功能 屏幕放
  • moment.js

    将时间戳转换为number moment Number date format
  • 用itext生成指定宽和动态高的二维码图片

    为什么80 的码农都做不了架构师 gt gt gt 标题和摘要中都提到 本文的一个目的就是生成定宽的二维码图片 还有一个很特别的要求 打印出来得图片需要被条码枪识别 用的第三方工具类库是itext 版本是2 0 为了实现二维码的指定宽高 我
  • Error in render: “TypeError: Cannot read properties of undefined (reading ‘length‘)“

    报错如下 在vue获取后台系统的菜单menu时 报此错 length未定义 经排查 是vue访问后台获取menu list数组的长度时引发的 那么问题来了 后台menu菜单的length必然是 gt 0的 但是这里未获取到就离谱 因为项目在
  • Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作

    前面三篇文章讲述了如何配置MyEclipse和Tomcat开发JSP网站 如何配置Servlet简单实现表单提交 如何配置MySQL实现JSP数据库查询 这篇文章主要讲述Servlet表单的提交 Java中实现数据库的查询操作和自己遇到的瓶
  • Vue组件的组成结构

    1 由3个标签节点构成
  • JavaScript如何运行

    项目场景 一些小伙伴刚入手前端开发 对Javascript十分陌生 下面就专门总结运行js文件的几种常用方法 一 Node js Node js 就是运行在服务端的 JavaScript Node js是一个事件驱动I O服务端JavaSc
  • 最大子矩阵(动态规划c++)

    题目描述 已知矩阵的大小定义为矩阵中所有元素的和 给定一个矩阵 你的任务是找到最大的非空 大小至少是1 1 子矩阵 比如 如下4 4的矩阵 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩阵是 9 2 4 1 1
  • 在浏览器输入URL到页面展示发生了什么?

    输入URL后 查询缓存 DNS服务器 TCP三次握手 HTTP协议包 浏览器处理HTML文档 TCP 和 UDP 的区别 写在最后 很多前端伙伴问题有没有体系的面试题 今天为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题

随机推荐

  • 图解通信原理与案例分析-24:5G NR 增强移动宽带eMBB是如何提升空口速率和频谱利用率的?

    前言 LTE通过QAM调制 OFDM调制 IQ调制 射频混频 实现了在20M空口带宽上 下行100M速率的二进制数据的通信 LTE A通过载波聚合 MIMO等技术 可以把空口的下行数据速率提升到1G 5G增强移动宽带eMBB更是厉害 把空口
  • 面向小白的深度学习代码库,一行代码实现30+中attention机制。

    Hello 大家好 我是小马 最近创建了一个深度学习代码库 欢迎大家来玩呀 代码库地址是https github com xmu xiaoma666 External Attention pytorch 目前实现了将近40个深度学习的常见算
  • Python 正则表达式匹配中文

    参照Python正则表达式指南 在使用Python的过程中 由于需求原因 我们经常需要在文本或者网页元素中用Python正则表达式匹配中文 但是我们经常所熟知的正则表达式却只能匹配英文 而对于中文编码却望尘莫及 于是我大量Google 几经
  • Ckeditor4超详细使用加配置教程

    下载地址 https ckeditor com ckeditor 4 download 4 download 下载好后解压 将文件夹放到项目目录下 引用 在需要用到的地方引用 这个就是富文本框 div style width 700px h
  • QT 软键盘

    Qt编写可换肤的中文双拼输入法 http www qtcn org bbs read htm tid 58490 html QT5的软键盘输入法实现 祥 使用了DBUS http blog csdn net tracing article
  • Docker Login 登录凭证安全存储

    文章目录 一 凭证存储场景描述 二 存储凭证产品选型 三 切换存储凭证产品 四 凭据存储使用总结 一 凭证存储场景描述 Docker 利用 docker login 命令来校验用户镜像仓库的登录凭证 实际并不是真正意义上的登录 仅仅是一种登
  • SpringBoot + MyBatis 结合 MVC框架设计 第2关:使用SpringBoot + MyBatis实现一个最简单的注册功能

    目录 任务描述 相关知识 项目创建 MVC框架 使用MVC分层实现注册 编程要求 测试说明 参考代码 任务描述 本关任务 使用SpringBoot MyBatis实现一个最简单的注册功能的小程序 相关知识 为了完成本关任务 你需要掌握 1
  • 俄语网站大全

    俄文网站大全 发表日期 2008年1月21日 已经有447位读者读过此文 转帖一些俄文网站 当然不排除一些网址可能已经打不开了 朋友们可以有选择的浏览 俄文网址 搜索引擎 语言 文学 http www weblist ru 汉俄通 http
  • FastDFS的三大误解

    FastDFS的三大误解 本篇文章转载于 FastDFS 作者 余庆 大佬的 FastDFS分享与交流 公众号 整理个别同学对FastDFS的三个误解 我将逐一澄清 误解一 FastDFS不易安装和配置 网上有人吐槽说 FastDFS 是他
  • 如何使用M33D1一体式在线氨氮传感器

    一 应用环境说明 M33D1一体式在线氨氮传感器是一种基于PVC膜制作的的铵离子选择电极 用于测量水中的铵离子含量 带有温度补偿 确保测量快速 简单 精确和经济 本册中详细介绍了氨氮传感器的技术参数 通讯协议和使用维护等内容 1 信号输出
  • String 类简述笔记

    前言 string是C java VB等编程语言中的字符串 用双引号引起来的几个字符 如 Abc 一天 字符串是一个特殊的对象 属于引用类型 在java C 中 String类对象创建后 字符串一旦初始化就不能更改 因为string类中所有
  • spring boot学习之自定义starter启动器

    starter启动器的目标 引入maven包即可自动装配配置 个人理解 如jdbc引入即可操作数据库 实现 1新建springboot工程编写实现类 2编写配置类 3配置 4打包 4新建工程引入使用
  • 移动端rem适配方案(解决1px 兼容问题)

    div style width 7 5rem height 2rem background red div
  • 使用openssl合成pfx格式证书的国密证书

    目前 openssl也已经开始支持国密协议 这边使用的是openssl 1 1 1k 进行的测试 下面记录一下自己的测试步骤 下载地址 https www openssl org source 安装编译方法参考下面地址 我也是参考下面进行安
  • JAVA学习日记(2)--找出某一个范围内完数

    完数 5分 题目内容 一个正整数的因子是所有可以整除它的正整数 而一个数如果恰好等于除它本身外的因子之和 这个数就称为完数 例如6 1 2 3 6的因子是1 2 3 现在 你要写一个程序 读入两个正整数n和m 1 lt n
  • 入门stm32简单电灯实验

    看原理图找内置LED接线 stm32f103 我这边是接的 PE5 外设时钟使能寄存器的相关配置 因为LED1接的是PE5 所以GBIO端口E 查看中文手册获取GPIOE寄存器起始地址0x4001 1800 通过查看系统架构 可以发现GPI
  • 【开发环境】Windows下搭建TVM编译器

    关于搭建TVM编译器的官方文档 Install from Source tvm 0 14 dev0 documentation apache org 1 安装Anaconda 首先我们需要安装Anaconda 因为其中包含着我们所需要的各类
  • QPalette的详细使用示例

    1 功能简介 QPalette是Qt中的调色板类 它提供的setColor 函数可改变控件的颜色 其原型为 void QPalette setColor ColorRole acr const QColor acolor 其中 ColorR
  • 一篇完整学习JUC并发编程(包含实例源码)

    文章目录 JUC并发编程 1 什么是JUC 2 线程和进程 并发 并行 线程有几个状态 6个 wait sleep区别 3 Lock锁 传统sychronized锁卖票实例 使用Lock锁卖票实例 sychnorized 和 lock锁区别
  • 循序渐进地代码重构

    对于如何进行代码重构 一直有着很多种说法 很多人都认为应该将重构代码放在backlog里 但是其实 这并不是一个理想的方法 在项目刚刚开始的时候 你的代码很干净 即使有的时候需要小小的绕一下路 但是这个时候我们可以轻松 平稳的添加功能 这个