写点什么

重构时应避免过度思考

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

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

关注

评论

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

细胞分裂问题的原创解法

王玉川

原创 算法 递归 LeetCode 动态规划

程序员培训班哪家教的比较好

小谷哥

运维训练营第十二课作业

好吃不贵

CBM业务模型是什么和为什么?

涛哥 数字产品和业务架构

企业架构

Verilog HDL门级建模

timerring

FPGA

架构实战营4.2 存储复制架构随堂练习

西山薄凉

「架构实战营」

Python 内置界面开发框架 Tkinter入门篇 乙

eng八戒

Python GUI tkinter

C++ const与指针

王玉川

c++ 指针 常量 const

技术升级落地需要天时、地利、人和

石云升

极客时间 1月月更 技术领导力实战笔记

资产梳理与应用自动化部署技术实践

智维数据

大数据 数据可视化 智能运维 应用交付平台 流量分析系统

软件测试/测试开发 | 如何使用代理配置快速定位接口测试脚本问题?

测试人

软件测试 自动化测试 接口测试 测试开发

web前端线下培训学习靠谱吗?

小谷哥

生产环境10分钟黄金时间快速排障:CPU不定时飙高怎么排查?

KINDLING

Java Linux 后端 监控 ebpf

网络安全中API常见漏洞

郑州埃文科技

API漏洞

聚焦低碳发电,践行“双碳”之路

脑极体

华为 智能光伏

数据可视化图表系列解析——瀑布图

Data 探险实验室

数据分析 数据可视化 图表 可视化数据

架构实战营4.4 如何设计存储架构随堂练习

西山薄凉

「架构实战营」

我们要的一种自学方式,也许是看书自学成才。

叶小鍵

可观测性之网站性能调优的实际案例-小白都看的懂

Yestodorrow

前端 可观测性 网站性能

软件测试/测试开发 | 接口自动化测试如何进行认证?

测试人

软件测试 自动化测试 接口测试 测试开发

WEB前端编程培训靠谱吗?

小谷哥

Java编程培训中心怎么样呢

小谷哥

认识区块链,认知区块链——NFT

MavenTalker

区块链 NFT web3 数字藏品

vivo 超大规模消息中间件实践之路

vivo互联网技术

kafka 中间件 pulsar 消息中间件 RoketMQ

NodeJS 实战系列:如何设计 try catch

光毅

JavaScript node.js

一文揭晓,我是如何在Linux中查找自如

蔡农曰

Linux 程序员 运维 后端

设计消息队列存储消息数据的 MySQL 表格

小虎

#架构训练营

Source Map 原理

道道里

前端 webpack sourcemap

架构实战营4.3 存储分片分区架构随堂练习

西山薄凉

「架构实战营」

C++ 引用:他是坤坤也是鸡哥

子夜的星

c++ 引用 语法 引用参数函数

大数据培训课程靠谱吗?

小谷哥

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