NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

重构时应避免过度思考

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

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

关注

评论

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

React 之元素与组件的区别

冴羽

JavaScript react.js 前端 前端框架 React

GitHub狂飙30K+star面试现场,专为程序员面试打造,现已开源可下载

钟奕礼

Java 程序员 java面试 java编程

【JUC】交换器Exchanger详解

JAVA旭阳

Java JUC

架构实战营模块1第1课 - 什么是架构,你理解对了么

净意

架构实战营

别再被小程序全页变灰给坑了

FE情报局

小程序 前端

龙蜥社区 11 月运营大事件回顾

OpenAnolis小助手

活动 生态 龙蜥社区 11月 运营月报

动不动问原理,面试官你来讲讲Spring的原理?讲出来我给你开25K

钟奕礼

Java 程序员 java面试 java编程

腾讯云数据库SaaS服务2022再升级 全面助力企业提升数据库运维能力

科技热闻

云小课|基于华为云WAF的日志运维分析,构筑设备安全的城墙

华为云开发者联盟

后端 华为云 waf 12 月 PK 榜

基于分发与计算的GRTN全球实时传输网络

阿里云视频云

互联网 科技 GRTN 全球实时网络传播 分发与计算

在一次又一次的失败中,我总结了这份万字的《MySQL性能调优笔记》

钟奕礼

Java 程序员 java面试 java编程

前端培训学习程序员如何提高解决问题的能力

小谷哥

白嫖GitHub Pages,轻松搭建个人博客

LigaAI

Hexo GitHub Pages 个人博客 个人网站 12 月 PK 榜

奇点云DataSimba R4.5发布关键更新,做到“可大可小可观测”

奇点云

堡垒机可以试用吗?哪款堡垒机可以?咨询电话多少?

行云管家

网络安全 信息安全 数据安全 堡垒机

OneFlow源码解析:自动微分机制

OneFlow

人工智能 深度学习 框架学习

前端培训没有基础应该怎么学习

小谷哥

iOS SIGKILL 信号量崩溃抓取以及优化实践

百度Geek说

ios 12 月 PK 榜 崩溃日志

国内主流商业智能BI工具剖析

流量猫猫头

大数据

云原生应用的最小特权原则

HummerCloud

k8s rbac 云原生安全

大数据培训程序员工作前景如何

小谷哥

大数据培训学习程序员还好找吗

小谷哥

编译器优化丨Cache优化

华为云开发者联盟

后端 开发 华为云 12 月 PK 榜

直播预告|PostgreSQL 技术内幕(四)执行引擎之Portal

酷克数据HashData

java培训怎么学习才好?

小谷哥

手把手教你成为荣耀开发者:账户结算操作指南

荣耀开发者服务平台

android 开发者 手机 荣耀 honor

HA高可用软件大致有哪些?大众用的哪款?

行云管家

高可用 ha 高可用软件

阿里P8面试官总结的《2023最新java面试题》,搞定90%以上的技术面

钟奕礼

Java 程序员 java面试 java编程

TiDB在科捷物流神州金库核心系统的应用与实践

TiDB 社区干货传送门

迁移 实践案例 HTAP 场景实践 OLTP 场景实践

App 长登录思考与实现part2

石君

App 信息安全 认证

更改 HIVE 表字段数据类型有哪些注意事项?

明哥的IT随笔

hadoop hive

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