重构:高手的姿势你学不会

从零开始玩转Franka Panda机器人 本文总结了笔者在学习使用Franka Panda机器人时的一些方法和经验总结。 阅读详情

软件开发是一门工程技术,其中任何一个技术或技能如果孤立地看都会是管中窥豹,只见一斑。任何一个作者在写书时都有一些前提和细节,然而经常是要不作者没说清楚,要不读者直奔主题而忽略了这些前提和细节,结果是东施效颦,适得其反,照猫画虎不成反类犬。

我在和很多人交流重构的时候发现,大家非常注重重构的结果,即重构前后的代码是什么样的,但会忽略重构的姿势。

高手重构的姿势

老马在书中强调频繁且小步地进行重构:"犯错误是很容易的,至少我很容易犯错误……重构技术是以微小的步伐修改程序,如果你犯下错误,很容易便可发现……真的犯错后,只考虑一个很小的改动范围,这使得查错和修复问题易如反掌,如果我改动了太多的东西,犯错时就可能陷入麻烦的调试,并为此耗费大把时间。小步修改,以及它带来的频繁的反馈,正是防止混乱的关键“。

这个重构的过程可以用下图表示:

重构:高手的姿势你学不会

"这就是重构过程的精髓所在,小步修改,每次修改后就运行测试"。

然而,我们大部分人做不到。

不是我们做不到小步修改。

是我们做不到每次修改后就运行测试。准确的说是无法做到每次修改后运行充分的测试,这成本太高了。要做到这一点,除非修改部分的代码有充分的自动化单元测试代码覆盖。然而,我见过的大部分工程中,单测代码少的可怜。所以,我们的重构过程可能是这样的:

重构:高手的姿势你学不会

由于测试成本太高,导致以下两个问题:

重构的步子变大,这样可以少测试几次,但步子大了,容易累积错误,修改错误变得困难

更可怕的是步子大了,累积的错误也多,有些错误不容易及时发现,会在某个节点暴雷,如果是提测后上线前还算幸运,但如果是在上线后暴雷,重构的罪过就大了

所以,结论是,对一般人来说,重构非常危险。

给普通人的建议

如果做不到自动化单元测试覆盖,但为了避免危险,建议就是:不要对已经上线的代码进行重构,甚至,时间点再提前一点,不要在测试之后去重构。

写一段新的代码的时候,很难一开始就把代码写的很整洁,所以先怎么舒服怎么写,写的差不多了,能跑通了,这时候,先不要去做全面的人工测试,先去重构,先去整理代码,整理完后,在做全面的人工测试。这样可以省下人工回归测试的成本。

这是对一般开发人员最实用的重构姿势。按理想的重构姿势做,软件原有功能很少被破坏,所以有非常多的时机做重构,这来源于自动化测试的保障以及这种保障下的小步修改,这些是"防止混乱的关键";但对于实用的重构姿势,你安全重构的机会只有测试前的这一次。所以,要无比珍惜。

除了这种安全的重构的时机,还有一些相对比较安全的重构,如果你的情怀能支撑你冒一点风险的话。

比如修改一个线上BUG的时候。

首先,有时候重构有助于你改BUG。你根本看不懂那个BUG所处的"屎山"一样的代码块,俗称"不敢改",在修复BUG前重构一下可能会帮助你读懂它,然后你稍微变的敢改了。

其次,由于改一个线上BUG引入的新的BUG后果并不严重,我说的不是对系统来说不太严重,而是说对改BUG的人。大多数管理者能容忍这种改BUG引入的BUG,但难以容忍只为了改善代码可读性而引入的BUG。

最后,你改完BUG,总得回归测试一下吧,包括你自己,包括测试人员。如果引入了新的BUG,测试人员也能承担一部分责任。

不是教你学坏,实在是没有办法,除非你不介意在"屎山"上再贡献一些自己的力量。这种相对比较安全的重构孰是孰非,难以说清,我个人既不赞成也不反对。

大家还是用好唯一的那一次安全重构的机会吧。

取法乎上得乎其中

我是一个叶公好龙式的书法爱好者,我经常会照着字帖去临摹,但一直无法达到专业的水准。

有一次我看到老师教孩子写隶书,讲的是"蚕头燕尾" 笔法,一个笔画被拆的特别细,完全是一个技术活,没有一点写字的乐趣。但我从中明白了我无法达到专业的水准的原因。

重构:高手的姿势你学不会

但知道和做到还是有一段距离的,我依然无法静下心练这些笔法,我还是喜欢随意地按字帖去临摹。

我知道永远也达不到专业的水准了,但这些临摹确实让我的字变得比以前好看了。

对于大部分人来说,重构也是这样。

取法乎上得乎其中。

DDM-MIMO-FMCW雷达速度模糊与解模糊MATLAB仿真 本文深入解析了DDM-MIMO-FMCW雷达中的速度模糊现象及其解模糊方法,通过MATLAB仿真详细展示了相位编码解调、速度扩展算法和混合波形设计三大解决方案。文章还提供了参数配置、信号建模和结果可视化的实用技巧,并分享了工程实践中的避坑指南,帮助开发者高效解决雷达信号处理中的速度模糊问题。 阅读详情

相关推荐

GBase8a-GDCA认证考试-复习参考题

为提升产品服务水平定期举办GBase产品认证培训,培训更多GBase数据库专业人员,满足用户快速成长的业务需求,建设GBase产品生态。请注意甄别,根据所学知识综合判断,正确率97%(97分)。

weixin_41826637的博客 2374

程序员在家撸码的十大姿势

大家好,我是帅气的算法工程师,好久不见~在家办公已经一周多了,不知各位感觉如何?曾经的你以为在家办公爽歪歪,今天的你迫不及待想回公司上班,电脑屏幕太小,椅子不舒服,网络不好,没有下班时间,被娃骑脸输出,被做饭逼疯,被父母嘘寒问暖疯狂投喂......啊这真是一段难忘的日子。 对于许多鹅厂程序员来说,在家办公这段时间也是非常特别的体验。没娃的开启沉浸式开发模式,有娃的开启一边撸码一边崩溃的模式......

3万+

取证实战:当嫌疑人电脑已关机,如何利用EFDD从休眠文件提取BitLocker密钥?

本文详细介绍了如何利用Elcomsoft Forensic Disk Decryptor(EFDD)从休眠文件(hiberfil.sys)中提取BitLocker密钥的实战技术。通过分析休眠文件中的内存快照,取证人员可以突破已关机加密设备的防线,获取关键解密信息。文章涵盖了工具配置、镜像获取、密钥提取及验证等完整流程,并提供了疑难问题解决方案和法律合规建议。

weixin_29315091的博客 344

TM4C1299NCZAD 搭配 NCA6416BYHP 的 I/O 扩展实战:控制与监测系统设计

在嵌入式系统中,GPIO 资源不足是常见瓶颈,I/O 扩展芯片通过 I2C 总线可有效解决。其原理是利用串行接口扩展数字通道,支持独立配置输入输出,降低主控负担。技术价值在于解耦控制与监测任务,提升系统可维护性和扩展性。典型应用于工业控制板、多路继电器驱动、按键矩阵采集等场景。本文以 TM4C1299NCZAD 主控与 NCA6416BYHP 扩展芯片为例,详解硬件连接、初始化顺序、中断去抖及驱动能力等实操要点,帮助工程师快速落地。

weixin_33827590的博客 402

手把手学计科--web网页设计

网页的组成:文字、图像和超链接等元素。还可以包括哦音频、视频和动画。分类:静态(固定信息)和动态(与服务器数据库进行实时的数据交换。HTML和CSS 是一种静态网页搭建技术。

Yhvaely的博客 1748

Cartographer全局重定位优化:无初始位姿约束的2万平工厂秒级定位实践

本文深入解析了Cartographer在2万平工业场景中的全局重定位优化实践,通过分支定界优化、子图动态加载和多传感器融合等关键技术,实现了无初始位姿约束下的秒级重定位。特别针对大场景下的快速重定位需求,优化后的系统在RK3588平台上表现出色,定位耗时从47秒降至1.8秒,成功率提升至91%,为工业自动化提供了高效解决方案。

rose2的博客 969

1、系统重构的基本概念,基本方法,作用

系统重构的几种定义: 它是一套严谨而安全的过程方法,它通过一系列行之有效的方法与措施,保证软件在优化的同时,不会引入新的BUG,保证软件改造的质量。系统重构,就是在不改变软件的外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。 由定义可知,系统重构不会改变软件的外部行为,即保证系统中的每个接口与改造前是等价的,其输入输出在改造前后是一致的。 系统重构

谢语天 4277

C#实战:通过ZPL指令与斑马打印机交互及状态监控全解析

本文全面解析了在C#中通过ZPL指令与斑马打印机进行交互及状态监控的实战方法。文章详细介绍了TCP/IP网络打印和Windows Raw打印两种核心连接方式,并深入讲解了ZPL指令的构建。重点阐述了通过SGD命令和斑马官方SDK实现实时打印状态监控的策略,为工业自动化场景下的可靠打印提供了完整解决方案。

weixin_29294395的博客 117

2024年重构:高手的姿势你学不会,线程池参数面试题

1、看视频进行系统学习这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。2、读源码,看实战笔记,学习大神思路“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。

2401_84558326的博客 718

Python爬虫实战:Boss直聘职位数据采集实战 - Playwright + 结构化解析完整方案(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 2187

【Java开发者必看】LangChain4j实战指南:使用AIService轻松集成聊天记忆Chat Memory到SpringBoot应用,通过封装多轮复杂对话,使聊天记忆的实现变得简单

聊天记忆是指在与用户的多轮对话过程中,能够记住之前的交互内容,从而提供更加连贯和个性化的回复。LangChain4j支持通过ChatMemoryProvider接口实现聊天记忆功能。

Spring Boot-Common On With You 448

HarmonyOS编辑器代码重构:解锁高效开发新姿势

在 HarmonyOS 应用开发中,DevEco Studio 是一款非常强大且常用的集成开发环境(IDE),它为开发者提供了丰富的代码重构功能 ,能极大地提升开发效率和代码质量。其中,Refactor-Extract(代码提取)功能十分实用。在编辑器中,它支持将函数内、类方法内等区域代码块或表达式,提取为新方法 / 函数(Method)、常量(Constant)、接口(Interface)、变量(Variable)或类型别名(Type Alias)。

大雨淅淅的博客 1134

制作一款精美的 Qt IFW 安装程序

对于 Qt IFW 来说,默认的安装界面并不吸引人。倘若要制作一款精美的安装程序,这显然是不够的,需要在此基础上进行一系列定制。

青春不老,奋斗不止! 5260

代码重构的前提是什么_如何写好代码——教你重构的正确姿势

在本篇文章内 将试图通过一个实际的项目来演示如何正确的重构,让大家感受到重构的魅力所在 一、什么是重构"重构"这个词可以用作名词也可以用作动词。1.1名词对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高可读性,降低其修改成本。举个栗子假如你的程序里面有 bug ,那么正确的重构后 bug 应该还存在。这就是不改变外部行为。1.2动词使用一系列重构手法,在不改变软件可观察行...

weixin_39624367的博客 229

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

重构Python项目的正确姿势:AI辅助下的7大最佳实践

掌握Python项目重构难题?本文结合PythonAI重构代码实战,分享AI辅助下的7大最佳实践,涵盖自动化检测、函数优化与架构升级,提升代码质量与维护效率,适用中大型项目迭代,值得收藏。

LiteTrans的博客 1047

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

重构Go代码的正确姿势:8个信号告诉你该出手了

掌握Go重构技巧,及时优化代码质量。本文列举8个需重构的典型信号,涵盖性能瓶颈、重复代码等场景,提供安全演进方法与最佳实践,提升可维护性与团队协作效率,值得收藏。

LogicNest的博客 690

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

模块化重构的正确姿势:90%工程师忽略的3个关键细节

掌握模块化重构的步骤,提升代码可维护性与团队协作效率。适用于大型项目优化、技术债治理等场景,聚焦接口设计、依赖解耦与渐进式重构三大关键细节。科学实施路径,降低系统复杂度,值得收藏。

PixelShoal的博客 775

实战指南:用Java Rewrite工具包重构代码的正确姿势

/ 只修改最近30天修改过的文件@Override@Overridetry {// 应用具体改写规则return cu;

心猿意码 1365

Claude Code 多文件操作:跨文件重构的正确姿势

新 Session。打开,把 API 路由文件也参考已加载的 API 路由文件,更新 User 相关的 TypeScript 类型定义,加上timezone字段,类型为。这一步通常很快,Claude 只需要加一行类型,但必须做——否则前端用这个类型的地方会报 TypeScript 错误。

2603_95436813的博客 509

代码重构的前提是什么_重构:改善既有代码的设计读书笔记

点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!来自公众号:我没有三颗心脏前言:捧读像这一类的书对于自己来说总带着一些神圣感,感谢自己并没有被这么宏大的主题吓退,看完了这里分享输出一下自己的笔记。一、理解重构什么是重构?按书中 P45 中的说法,重构这个概念被分成了动词和名词的方面被分别阐述:重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提...

weixin_39960319的博客 284

AI绘画角色姿势优化指南:从根源预防到生成后修正

在AI绘画领域,扩散模型通过海量图像-文本对学习生成内容,但其在生成符合物理规律的人体姿势时面临核心挑战。这主要源于模型对三维空间关系缺乏内在理解,以及训练数据的偏差导致对非常见姿势的‘平均化’倾向。为解决这一问题,ControlNet等技术应运而生,它允许用户输入姿势参考图(如骨架图),为生成过程提供明确的空间结构约束,从而显著提升角色姿态的自然度与准确性。在角色生成、概念设计等应用场景中,结合精准的提示词工程(如使用解剖学术语描述动作)与ControlNet等工具,能够系统性地预防和修正扭曲的手指、失衡

weixin_30855761的博客 500

复杂图像编辑指南:物体替换/姿势调整/链式编辑的Qwen-Image实战

《Qwen-Image图像编辑技术实战指南》摘要:本文深入解析Qwen-Image在复杂图像编辑中的三大核心能力——物体替换、姿势调整和链式编辑。通过详细的代码示例展示了掩码控制、关键点检测等技术实现,并提供了完整的工业级解决方案。文章包含硬件配置要求、软件部署指南、编辑质量评估指标及性能优化技巧,特别介绍了链式编辑状态管理器的创新设计。实验数据显示,该方法使姿势调整自然度提升63%,编辑效率提高4倍。最后展望了从3D控制到视频编辑的未来发展路径,为电商、影视等领域的图像处理提供了革命性工具。

Liudef06的博客 5977

“ 尽量别没事重构代码”,这不仅仅是技术,更是人情世故

比如,现有代码影响了性能、增加了Bug率,或者阻碍了新功能开发,这些都是正当的重构理由。比如,别人觉得你重构是在“挑前辈的毛病”,或者认为你没干实事,专注搞“花架子”。否则,宁愿忍着手痒别动。今天老韩就跟你们好好掰扯掰扯:为啥重构代码这事,你得尽量少碰,特别是“没事找事”的重构,真能让整个项目走向“社会性死亡”。在没跟团队达成一致前,千万别擅自重构,否则你改的不只是代码,还有同事的愤怒值。如果你把大把时间花在重构上,但没能给业务带来直接收益,老板不会因为你的“完美代码”给你加薪,反而会觉得你“不务正业”。

m0_61562916的博客 455

github的python代码怎么跑_如何写好代码教你重构的正确姿势(下篇)

本文作者:开课吧效瑞图文编辑:开三金各位小伙伴们,大家呼声超高的下篇来喽,赶快来跟着效瑞老师学习吧~~错过了【上篇】的小伙伴们可以直接点击下方蓝色文字,就可以复习上节课学过的知识咯☟☟如何写好代码--教你重构的正确姿势(上篇)本节课我们将要详细给大家讲解重构代码的“独家秘笈”,满满的编码干货,赶快拿小本本记起来吧!提取字符串常量目前为止,我们应该能发现一个特别明显的重复:表示“单位”的字...

weixin_39561004的博客 548

densepose安装_基于DensePose的姿势转换系统,仅根据一张输入图像和目标姿势

DensePose团队在ECCV 2018发表又一杰作:密集人体姿态转换!这是一个基于DensePose的姿势转换系统,仅根据一张输入图像和目标姿势,生成数字人物的动画效果。DensePose是Facebook研究员Natalia Neverova、Iasonas Kokkinos和法国INRIA的Rıza Alp Guler开发的一个令人惊叹的人体实时姿势识别系统,它在2D...

weixin_39633455的博客 221

重构十年老项目后,我终于悟了:这才是 2026 年 PHP 开发的正确姿势

说了这么多,回到最开始的问题:2026 年,我们应该怎么搞 PHP?把 PHP 当成最好的“连接器”来用。它连接前端:无论是传统的 Inertia.js,还是作为纯 API 后端给 React/Vue 提供数据,PHP(尤其是 Laravel 和 Symfony)都做得极其出色。它连接数据库:强大的 ORM 让你几乎不用写复杂的 SQL。它连接AI:通过 API 和消息队列,PHP 成为了 AI 大脑与现有业务数据之间的桥梁。它连接运维。

ZHOUPUYU的博客 873
上一篇: 腾讯大牛教你如何使用Java实现二叉树的添加,删除,获取以及遍历
下一篇: 想成为Java架构师?先学会如何画好架构图吧!
大G哥
博客等级 码龄9年 5303粉丝 1408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值