写点什么

重构时应避免过度思考

  • 2012-02-11
  • 本文字数:1043 字

    阅读完需:约 3 分钟

重构是一门在不改变软件外部行为情况下,改善既有代码内部结构的一门技术。从表面来看,重构需要引入大量的思考行为,然而,过度地思考同样会产生不利的影响。

Kent Beck 提到,重构中面临最大的挑战就是如何做到循序渐进,循序渐进指的是如何将工作分解为可控的步骤,并且每个步骤都易于管理。重构步伐过快会导致不稳定代码的出现。此外,想得越多,越是谨慎反而会严重减慢重构的步伐。

正如许多与我结对编程的伙伴都会告诉你的那样,我有一个非常不招人喜欢的习惯:在重构时总会说“不要再想啦”。我知道这并不是我真正要说的,因为我不可能去故意表达这个意思,但是直到现在,我才有机会可以给出一个更好的解释。

Kent 解释了“水平和垂直重构”的概念。垂直重构是指调整方法或代码块在调用堆栈中的上下顺序,然而水平重构则指的是在类似于同级别的对象间所做的调整。依 Kent 所述,重构时应避免同时做上述两种调整。

当需要重构具有多重调用或是多重实现的对象时,就要额外小心,并且重新回到垂直和水平方法,将这两者操作分开进行,并且要时刻注意代码重构的深度。

话虽如此,做到并不容易⋯⋯

比较好的一个办法就是使用索引卡(Index Cards):

在电脑旁放置索引卡会帮助我保持专注。当我在处理水平重构时突然意识到还可以做垂直重构时,我会迅速记在索引卡上,然后马上回到刚才正在进行的工作中。这种方法不仅可以使我在进行下一步工作前,有效地先将手头的工作结束,同时,又不会导致某些好点子被遗忘。方法之好用,整个过程感觉就像是在做冥想,技能感受到自己的呼吸,又不会被完全自我的意识所牵绊。

J. B. Rainsberger 同意这种观点并同时指出:

无论你在做什么,想要专注时,手边准备一张卡片和一支笔。当有奇思妙想突然在脑海中闪现,而这些事情又不需要立刻处理时,就可以用 5 个或更少的字将它写下来,然后继续回到刚才所作的事情中。效果甚是神奇。

这与 Joshua Kerievsky 所提倡的 Narrow Changem 模式非常相似。每次只专注于一小部分的变化点,然后再继续在后续的重构中应用 Narrow Change 或是 Parallel Change 原则。

尽管重构中需要思考,但是,保持专注并避免潜在的干扰对良好的重构行为是很有必要的。Kent 说道:

我的同伴经常会在重构的过程中产生一些好的想法,比如如何将一些函数挪到 B 中。这时我就会告诉他停止思考。我真实的目的并不是不想让他去思考,我只想让他专注的把手头的事情先做完。就像我们往墙上钉钉子,钉子才刚钉进去了一半,我们没有理由放下手里的活去钉另外一个。

查看英文原文: Stop Thinking During Refactoring

2012-02-11 21:024309
用户头像

发布了 156 篇内容, 共 58.3 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

AWS OpenSearch 可观测最佳实践

观测云

AWS

大模型性能测试完全指南:从原理到实践

测试人

人工智能 软件测试 测试开发

数字人超级大师:微擎生态下的高保真 AI 数字人解决方案

微擎应用市场

Apache Flink错误处理实战手册:2年生产环境调试经验总结

Apache Flink

大数据 flink 实时计算

AI测试平台实战:自动化评分与多模型对比评测深度解析

测试人

零碳园区:绿色转型的关键实践与智慧支撑

开源能源管理系统

开源 能源管理系统

AI 生成内容崛起,内容创作者如何避免被取代?

Wolink

人工智能、 海外营销推广 沃链Wolink 达人营销

为什么编码智能体可以重塑开发范式?

Comate编码助手

AI辅助编程 AI 编程 文心快码 文心快码Zulu

智联招聘 × Pulsar|Pulsar 客户端在高吞吐场景下的内存控制实践

AscentStream

消息队列

AI Agent 发展趋势与架构演进

阿里巴巴云原生

阿里云 AI 云原生 agent

588次长征征程再添新星!我国成功发射卫星互联网低轨卫星

DevOps和数字孪生

航空航天

拒绝代码纠错不准、原有逻辑被改!飞算 JavaAI 行间预测功能实战解析

飞算JavaAI开发助手

基于开发者空间云开发环境,使用MateChat+MaaS构建智能对话应用

华为云开发者联盟

MaaS 华为开发者空间 MateChat

基于开发者空间知识推荐能力,搭建DeepSeek知识集

华为云开发者联盟

DeepSeek 华为开发者空间

深入解析Cairo静态分析工具Amarna:安全编程新利器

qife122

静态分析 区块链安全

云智慧CastrelAI:生成式AI重塑故障根因新范式

云智慧AIOps社区

智能运维 IT 运维 工单管理

性能监控与剖析工具全指南:测试开发工程师必备利器

测试人

一键生成完整SpringBoot工程!飞算JavaAI 代码工具如何解决老项目重构痛点

飞算JavaAI开发助手

Databend 亮相 DTCC 2025:存算分离架构引领湖仓一体化

Databend

当远控遇上AI会擦出什么火花?细数ToDesk与向日葵的AI赋能功能

小喵子

远程 向日葵 ToDesk

了解CDC(变更数据捕获)如何革新数据集成方式

谷云科技RestCloud

数据传输 ETL 实时同步 CDC 数据集成平台

迈特趣视频创作 SaaS 系统:视频变现新工具

微擎应用市场

行业分享丨AI赋能流体仿真:从虚拟风洞到智能设计的实践与案例

Altair RapidMiner

人工智能 AI 仿真 CAE hyperworks

产研协作必备!一键拆分用户故事,敏捷冲刺规划不要太轻松

职场工具箱

效率工具 产品经理 敏捷开发 在线白板 在线协作

多点DMALL与OceanBase:实现租户间资源完全隔离与低成本系统升级

老纪的技术唠嗑局

oceanbase 国产数据库

IT管理员遇到了公司数据泄露问题,老板要让IT管理员出一个泄露报告, IT管理员怎么办?

运维有小邓

开源协同驱动能源管理革新:MyEMS 如何重塑行业生态

开源能源管理系统

开源 能源管理系统

手把手教你搭建MCP服务器

测吧(北京)科技有限公司

#人工智能 MCP

从易用性的角度来看,哪个ETL平台比较好用?

谷云科技RestCloud

Apache ETL 数据集成平台 ETLCloud informatica

Elasticsearch 8.17 智能检索升级全攻略

阿里云大数据AI技术

搜索引擎 elasticsearch 阿里云 多模态 rag

重构时应避免过度思考_研发效能_Vikas Hazrati_InfoQ精选文章