红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

重构时应避免过度思考

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

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

关注

评论

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

软件测试 | Django开发环境

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

测试

Tapdata 的 ∞ 实践:中小企业如何轻量、高效地搭建起一个灵活易用的数字化平台

tapdata

数据库

数智化转型再加速,低代码开发助力企业转型

加入高科技仿生人

低代码 数智化 数字转型 数智转型

聊点技术 | 全新功能,让Bonree ONE变得更强

博睿数据

可观测性 智能运维 博睿数据 Bonree ONE ONE有引力

【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合SpringBoot客户端访问的实战指南

洛神灬殇

分布式 OSS Minio 三周年连更 SpringBoot-Starter

软件测试 | Requests库

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

测试

如何计算真实的数据库成本

天翼云开发者社区

大企业必读!五大纳税申报难题解析

用友BIP

IPP SWAP孵化器LP算力系统开发技术

薇電13242772558

区块链

人工智能(AI)行业如此烧钱,离真正商业化还有多远,如果不商业化还能走多远? | 社区征文

迷彩

人工智能 AIGC 生成式AI 三周年征文 三周年连更

IP 地址是如何被创建和管理的?

海拥(haiyong.site)

三周年连更

软件测试 | 程序报错不要慌

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

测试

如何为 Databend 添加新的系统表

Databend

玩转云端| 解密!业内首款存储资源盘活系统如何炼成?

天翼云开发者社区

Kubernetes Gateway API 深入解读和落地指南

北京好雨科技有限公司

Kubernetes 云原生 rainbond 企业号 5 月 PK 榜 Gateway API

John Schulman:强化学习与真实性,通往TruthGPT之路

OneFlow

推荐6个我经常逛的“小网站”,嘿嘿嘿!!!

引迈信息

程序员 低代码 摸鱼 JNPF 文案

软件测试 | 接口测试工具的不足

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

测试

Flink API的4个层次

阿泽🧸

flink 三周年连更

3D点云数据集在3D数字化技术中的应用

来自四九城儿

【转载】亚信科技亮相2023移动云大会,“数智云网”助力行业转型发展

亚信AntDB数据库

AntDB AntDB数据库

九科信息参加长三角智慧港口论坛,分享港口企业超级自动化实践

九科Ninetech

什么是人工智能领域模型的 temperature 参数?

Jerry Wang

人工智能 机器学习 深度学习 三周年连更

加快推进数智化转型,引领盐行业高质量发展

用友BIP

PostgreSQL JDBC 开发指导

攻城狮

postgresql JDBC 驱动程序

数据库中的 Schema 变更实现

KaiwuDB

线上直播 KaiwuDB Schema 锁表

ebpf-linux 安全“双刃剑”

统信软件

Linux Kenel

iOS MachineLearning 系列(11)—— 自然语言之词句相似性分析

珲少

ChatGPT+私有数据=智能知识库+个性化AI

WorkPlus

身为程序员,你有哪些提高写代码效率的黑科技?

这我可不懂

程序员 低代码

浪潮海岳低代码平台inBuilder开源社区版特性推荐系列-第一期

inBuilder低代码平台

开源 低代码 实操

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