写点什么

重构时应避免过度思考

  • 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:024203
用户头像

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

关注

评论

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

ClkLog埋点分析系统-支持自定义事件分析

ClkLog

数据分析 埋点 自定义 开源软件 埋点分析

专业商业数学软件:MATLAB R2023b for Mac/win 激活版

你的猪会飞吗

mac软件下载 MATLAB R2023a MATLAB R2023b下载 Mac软件下载站

人工智能与大数据:新时代的技术融合与未来展望

天津汇柏科技有限公司

大数据 人工智能’

测试管理圆桌讨论会 | 解锁测试管理的核心问题提升你的管理实力

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

测试

Qt(C++)使用QChart静态显示3个设备的温度变化曲线

DS小龙哥

物联网

MES制造执行系统有什么数据采集方式?

万界星空科技

数据采集 mes 设备管理 万界星空科技 设备数据采集

"Pandabuy事件后,淘宝代购集运系统如何强化仿牌敏感词风控策略"

tbapi

淘宝代购集运系统 Pandabuy 逆向海淘

SQL的执行顺序以及它的重要性与元数据

松子(李博源)

数据中台 元数据 SQL Plan 血缘分析

鸿蒙开发之如何实现帧动画

彭康佳

鸿蒙 帧动画

AI日报|我国人工智能核心产业规模已达5784亿元!阿里通义Qwen2成斯坦福大模型榜单最强开源模型!

可信AI进展

#人工智能

一次压测引发的数据库CPU飙升

阿里技术

压测 故障排查 排查思路 排查

LED显示屏:投资还是消费?

Dylan

数字化 LED LED显示屏 led显示屏厂家 户内led显示屏

干货满满!亚信安慧亮相PostgreSQL峰会,分享AntDB数据库国产化运维之路

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 6 月 PK 榜

场景化解决方案|AR远程协作

AR玩家

Rokid Vision pro 炬目AR 炬目科技 AR远程协作

深入比较:HTTP 和 RPC 的区别

Apifox

程序员 gRPC 网络协议 RPC HTTP

【论文速读】| 超越随机输入:一种基于机器学习的新型硬件模糊测试方法

云起无垠

嘉为蓝鲸告警中心:支撑大型证券公司高效处理高并发告警事件

嘉为蓝鲸

告警管理 可观测

算力服务先锋!和鲸科技入选《2024中国智算产业生态图谱》

ModelWhale

mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版

你的猪会飞吗

mac软件下载

测试管理圆桌讨论会 | 解锁测试管理的核心问题,提升你的管理实力

测试人

软件测试

构建领先数据基础设施,天翼云携手信通院发布《大数据平台云化改造实践指南(2024年)》

编程猫

国内怎样使用GPT4 turbo

蓉蓉

GPT-4 Turbo

文献解读-基因编辑-第十一期|《通过CRISPR介导的Gaa纯合c.1935C>A(p.D645E)点突变的庞贝氏病敲入小鼠模型的建立和表征模拟了……》

INSVAST

基因数据分析 生信服务 基因编辑

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