代码重构,最佳实践,你真的会代码重构吗?

article/2025/8/14 19:10:48

WHAT:什么是重构?

Martin Fowler:重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。

在这里插入图片描述

  • 大型重构
    • 对象:对系统、模块、代码结构、类与类之间的关系等的重构
    • 方法:有分层垂直拆分、模块化水平拆分、解耦、抽象UI组件、抽象业务组件、抽象区块
    • 方法论:编程范式、设计原则、设计模式
    • 影响:代码改动多,影响面广,难度较大,耗时较长,引入BUG风险高
  • 小型重构
    • 对象:对类、函数、变量等代码级别的重构
    • 方法:规范命名(见名知意)、规范注释、函数拆分、提取重复代码、eslint等
    • 方法论:统一代码风格、制定规范、语义化编程、eslint
    • 影响:影响面小,难度小,次数频繁,引入BUG风险低

WHY:为什么要重构?

  • 软件最初设计的时候没有考虑到全部的功能和细节
  • 软件需求变更和持续迭代导致原先的设计已不适用
  • 消除破窗效应,当代码里面有了坏味道而不及时改善,容易破罐子破摔加速恶化

HOW:如何重构代码?

  • 灵活运用编程范式思想
    • 面向对象
    • 面向过程
    • 函数式编程
  • 以设计原则为核心
    • SOLID
    • KISS
    • DRY
    • YAGNI
    • LOD
    • CRP
  • 以eslint为基础手段
    • airbnb
    • standard
    • recommanded
    • prettier
    • 自定义
  • 渐进式持续重构代码为方法论
  • 优点:持续集成、进度可控、过程可逆、不影响正常业务开发进度
  • 按金字塔原则对项目代码进行拆分
    • 业务模块水平拆分
    • 代码分层垂直拆分
  • 评估出每一个重构单元的耗时
    • 合理评估工作量
    • 权衡重构的性价比
    • 增加重构的可控性
  • 正在做或规划中的业务单元顺手完成重构,其他部分安排空闲时间依次重构
  • 注意
    • 从0->1一次性完成重构的理想场景只存在于理想中。如果真实存在,只能说明项目过小或者已经趋于稳定迭代很少,这种情况要考虑是否真的有重构的必要!!!
    • 不要有了锤子(重构方法论),就满世界去找钉子
    • 重构不是软件开发的必要流程,而是现有代码的组织缺陷或不合理的补救方式。
    • 养成好的代码风格code review的习惯避免代码的坏味道才是根本

WHEN:什么时候重构?

  • 不要等到积重难返有了瓶颈之后再进行重构,大规模高层次的重构耗时耗力难度剧大
  • 应该建立起渐进式持续重构的意识,发现当前业务代码写的有问题就应该及时进行小规模的重构,而不是欠一屁股技术债

BUG:重构会不会引入新的BUG?

会,所以怎么办呢?

  • 通过完整的单元测试保证重构前后的外部可见性一致
  • 有条件的话找专业的测试进行端到端测试灰度测试

RISK:重构上线带来BUG的风险怎么解决?

如果不通知业务方直接将重构的代码上线,一旦出现问题,你肯定全责并且重构没有功劳也没有苦劳了

  • 有条件的话找专业的测试进行端到端测试和灰度测试
  • 必须通知业务方并说服业务方同意,让业务方做好准备上线后检查一下。如果真的引入了bug也不太会追责,因为在预期内并且我们的目标也是为了项目的长远发展呀

FEASIBILITY:如何让业务方意识到现阶段重构是必要的并同意?

  • 让业务方、产品、测试看到开发中的痛点和技术上的瓶颈
  • 让所有人意识到缝缝补补破窗效应导致问题加剧,已经积重难返了
  • 强调重构带来的技术收益业务收益
  • 提供切实可行并可控的重构计划方案

PERFORMANCE:重构价值不被认可怎么办?

  • 明明是你代码写的烂才导致的重构,浪费时间,还有脸要绩效?想屁吃呢
    • 承认自己会写bug,表明没有不写bug的程序员(勇于担当并弱化责任,表明owner身份和地盘
    • 指出导致重构的其他原因:需求频繁变更,紧急需求倒排工时,没有将业务长期规划方向信息同步给开发,多人协作团队没有统一风格,团队没有code review,没有eslint规范等等(表明主要责任不在我,但是我意识到了问题主动解决了)
    • 强调重构带来的优点:BUG数量减少,维护成本下降,BUG排查变快,开发速度增高等(业务价值才是绩效的根本

(ps:本博客用于学习总结,欢迎友好交流)


http://chatgpt.dhexx.cn/article/9YMsdMSt.shtml

相关文章

代码重构有什么意义?为什么重构有用?

点击上方“武培轩”,选择“设为星标” 技术文章第一时间送达! 所谓重构就是在不改变代码外在行为的前提下,对代码进行修改,以改进程序的内部结构。本质上说,重构就是在代码写好之后改进它的设计。 前几个月完成了一个模…

代码重构之路 --我的2022年总结

2022年是我正式参加工作的第10个年头,也是我在CSDN上写博客的第11个年头。在这10余年的时间里,虽然在工作上遇到了各种情况,但我一直坚持输出、坚持分享,一共在CSDN上发表了530多篇原创博文。在这些文章中,大部分都是与…

java代码重构的思路Java代码重构的几种模式

Java代码重构的几种模式 Java代码的重构模式主要有三种:重命名方法重构模式、引入解释性变量重构模式、以查询取代临时变量重构模式重命名方法重构模式建议执行如下的步骤来完成:1.建立一个具有新名称的方法2.将旧方法的方法体复制进新方法3.讲旧方法的方…

java 代码重构

几天前的一次上线,脑残手抖不小心写了bug,虽然组里的老大没有说什么,但心里面很是难过。同事说我之所以写虫子是因为我讨厌if/else,这个习惯不好。的确,if/else可以帮助我们很方便的写出流程控制代码,简洁明…

代码重构终极指南!!

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇 作者丨Alex Omeyer译者丨弯月出品丨CSDN(ID:CSDNnews)原文链接: https://medium.com/swlh/the-ultimate-engineers-gu…

如何进行代码重构?

作为一个程序员,大部分时候,如果不是一个人承包整个项目,那么有1/3的时间在写代码,1/3的时间在看别人写的代码,剩下的1/3的时间在摸鱼。 那么如何提高摸鱼的时间?看别人写代码十分头疼,分分钟想…

代码重构学习

一、代码重构是什么 用重构手法去重构代码 二、为什么需要代码重构 1.方便维护。为了在修改代码时,添加的地方有个切入点,减少bug。 2.有利于理解设计思想和代码。 三、代码重构怎么做(养成习惯) 思想: 1.修改一…

代码重构技巧:如何将烂代码变成好代码?

这是本文的目录 前言重构入门1. 格式化代码2. 注释3. 废弃的代码4. 变量命名5. 常量命名6. 负值条件的重构7. {} 作为单独的一行8. 变量定义和使用距离太远 重构进阶1. 重复代码2. 函数参数3. 变量多余4. 缺少变量5. 复杂条件 老旧代码的重构利用工具总 结零基础Python学习资源…

代码重构新手教程:如何将烂代码变成好代码?

作者 | 王莉敏 策划 | 蔡芳芳 作为有几年工作经验的程序员,都会对 bad code 不满意。如何将烂代码变成好代码,本文将由浅入深、一步步带你理解重构的奥秘,让你对重构有个基本的了解。本文基于文章《The Simple Ways to…

常见代码重构技巧(非常实用)

你已选中了添加链接的内容点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2020 超神之路,…

hue执行workflow工作流出现直接FAILED

场景: 执行以下任务流的时候就出现了直接失败的情况 在第一次执行并且数据完善的情况下测试的,状态是成功的 但是第二次是在第一次基础上测试的,基础数据有所缺失 日志为: Failing Oozie Launcher, Main class [org.apache.oo…

Git Workflow工作流示意图

来自:http://blog.osteele.com/posts/2008/05/my-git-workflow UPDATE: git pretty 来自: http://justinhileman.info/article/git-pretty/full/ from: http://iccm.cc/git-workflow/

使用Python开源库Couler编写和提交Argo Workflow工作流

Python 是用户在 Kubernetes 上编写机器学习工作流的流行编程语言。 开箱即用时,Argo 并没有为 Python 提供一流的支持。相反,我们提供Java、Golang 和 Python API 客户端[1]。 但这对大多数用户来说还不够。许多用户需要一个抽象层来添加组件和特定于…

SharePoint 2013 Nintex Workflow 工作流帮助(八)

博客地址 http://blog.csdn.net/foxdave 工作流动作 15. Complete Workflow Task(User interaction分组) 此工作流动作将完成任何进行中的任务,它将处理足够的单独任务来达到选择的结果,接下来工作流引擎会依据工作流的设置处理…

工作流(Workflow) -- 实现简单工作流程

工作流(activiti) 工作流简介 业务过程的部分或整体在计算机应用环境下的自动化 工作流就是多个参与者,按照某种预定义的规则,传递业务信息,进行审核的功能一个框架(activiti) 核心 23张表 ACT_RE_*:RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (…

wf工作流java_WF Workflow 状态机工作流 开发

概述 工作流是对业务流程的建模,当我们设计工作流的时候,我们首先要分析业务处理过程中要经历的步骤。然后,我们就可以利用WF创建工作流模型来模拟业务的处理过程。 我们知道,WF包含两种类型的工作流:顺序工作流和状态…

Mendix 9.6 - Workflow(工作流)基础设计

一 概述 Workflow(工作流)是Mendix 9版本中新增的一种可视化语言功能模块,我们可以用它来构建可扩展的流程。此外它还与其他可视化语言完全集成,例如微流编辑器和页面编辑器。 在公司我们往往需要填写许多表单,包括行政、人事、IT等方面的&a…

workflow工作流(三):画流程图工具对比

一、总结 我所用过能画工作流的工具有2个:1.eclipse插件,2.flowable官方网页版,结论是eclipse插件好用,后者要上传下载,还容易丢数据 注意事项:eclipse插件画出来的bpmn文件的schama是activiti&#xff0…

Bladex Workflow工作流引擎开发进阶-版本v1.2.2

Bladex Workflow工作流引擎开发进阶 1 Bladex Workflow简介2 Flowable简介3 workflow部署和配置-参考文档《BladeX插件 - Blade-flow使用帮助文档 》4 配置任务监听4.1 问题:监听类注入不了service 5 配置事件监听6 复杂表单-配置外部表单(不建议配置超大…

workflow工作流(二):34张表

1.常用的表 2.总共34张表 Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: RE表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则&…