HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

重构时应避免过度思考

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

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

关注

评论

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

涛思数据荣获北京市新技术新产品(服务)证书

TDengine

数据库 tdengine 时序数据库

RN状态管理MobX使用

凌宇之蓝

React Native

数字疗法与心理健康应用的普及

心大陆多智能体

人工智能 AI 心理健康 数字心理

江苏省环保集团:打造财务共享中心,每年节约机构运转费1400万元

用友BIP

国企干部选拔合规| 数智化工具赋能国企优化干部选拔机制

用友BIP

LeetCode题解:62. 不同路径,动态规划(空间O(n)),JavaScript,详细注释

Lee Chen

毫秒级响应!清科优能应用 TDengine 建设虚拟电厂运营管理平台

TDengine

数据库 涛思数据 tdengine 时序数据库

spss统计软件:IBM SPSS Statistics 27 win/mac 中文激活版

你的猪会飞吗

Mac软件下载站 苹果电脑软件下载

AI+供应链丨一图读懂用友BIP供应链智能场景

用友BIP

LeetCode题解:2042. 检查句子中的数字是否递增,直接遍历,JavaScript,详细注释

Lee Chen

嘉为蓝鲸监控中心:助力大型金融企业实现各类监控场景全覆盖

嘉为蓝鲸

监控 可观测

ITSM流程落地经验之问题管理

嘉为蓝鲸

ITSM 事件管理 问题管理

C#.Net筑基-集合知识全解

EquatorCoco

C# .net

某大型机场:告警全覆盖建设之路,引领业务持续性显著提升

嘉为蓝鲸

监控告警 可观测

软件测试学习笔记丨软件测试流程体系

测试人

软件测试

Koupleless 内核系列 | 一台机器内 Koupleless 模块数量的极限在哪里?

SOFAStack

开源 云原生 开发 架构治理 软件应用架构

httpsok-v1.13.0支持七牛云证书自动部署

物有本末

七牛云存储 SSL证书 七牛云 免费SSL证书

【ASeeker】Android 源码捞针,服务接口扫描神器

iofomo

android 源码 Framework

TON: 引领区块链革命,有望成为下一个十亿级用户公链巨头

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

拼多多商品详情数据接口(Pinduoduo.item_get)

tbapi

拼多多 拼多多商品详情接口 拼多多数据

🔥httpsok-v1.13.0支持nginx证书部署管理

物有本末

SSL证书 SSL域名 免费SSL证书 (SSL)/TLS

京东工业平台商品详情数据接口(vipmro.item_get)

tbapi

京东 京东工业品数据采集 京东工业平台数据采集 京东工业品商品详情数据

养猪大户必备!教你用ModelBox开发一个AI数猪应用

华为云开发者联盟

人工智能 华为云 华为云ModelArts 华为云开发者联盟 企业号2024年6月PK榜

TDengine 签约极氪汽车,建设新一代车联网云端基础平台

TDengine

数据库 tdengine 时序数据库

有了MES、ERP,质量管理为什么还需要QMS?

万界星空科技

万界星空科技 QMS 质量管理系统 生产质量管理

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