大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

如何进行大规模重构

  • 2010-08-30
  • 本文字数:1144 字

    阅读完需:约 4 分钟

从定义上看,重构意味着改变程序的内部结构,而不改变外部的功能行为。 这样做大多是为了提高程序的非功能性属性,从而提高代码的质量。然而,即便是经验丰富的敏捷开发者,在进行大规模的重构时也是如履薄冰。社区中的成员对掌控大规模重构的几种方式进行了讨论。

在最近的讨论中,Andreas 想要知道三种可能完成大规模重构的方法中哪种最好。他的方式包括,

  • 一次完成——定义最终状态的结构,然后将代码一次完成。
  • 分而治之——将一大团乱七八糟的代码分为两段,然后重复这样的操作,直至完成……
  • 压制(Strangling)——压制类

大多数回应者都认为“一次完成”几乎不会成功的。 Aaron Digulla 指出他在整个职业生涯中一直使用压制的方法。这种想法是要慢慢地将不好的代码变为崭新的优质代码,并在过程中用测试来保证转换的正确性。这种策略的优势在于,因为你是从小片段慢慢开始的,因此风险很小。David Hall 和 Shane MacLaughlin 强调了分而治之方法的重要性,但也要针对程序所有修改的部分编写充分的测试。一些人建议完全推倒重写,但是正如 InfoQ 之前的一篇文章所说的,那会让你面临一系列的挑战

Sibylle Peter 和 Sven Ehrke 提到,他们使用的方法是,先对工作进行评估,然后为大规模的重构制定主要计划。对于每个重构步骤,他们都会遵循以下三步:

  • 分析: 定义 想要的结果,并找到达到目的的方法。
  • 实现: 应用重构技术 来相应地改变代码。
  • 稳定: 应用一些方法, 确保实现的结果是 持久的。

另一种让大规模重构得以进行的方法是“天皇牌”(Mikado)方法。回顾天皇牌方法的历史,我们会发现它与 Daniel Brolund Ola Ellnestam 所做的工作有关,而它的名字来自于天皇牌游戏。根据这个方法,

修改代码就像进行天皇牌游戏一样。当你想要对代码库做出修改时,几乎无法以正确的方式做出准确的修改 你需要做些准备、移动代码、抽取类等等。我们很少会第一次就抓到天皇牌。 更多的是,在“重构天皇”可用之前,你需要做一系列的变动,有条不紊地向你的牌堆的底部进发,以达到目的。

使用天皇牌方法,首先要记住最终的目的。对于任何需要重构的代码,我们首先要创建一幅依赖图,在上面写下最终的目标。下一步是识别出想要达到目标所需要的直接前提,然后以这种方式继续识别依赖关系,直到达到没有任何前提或者依赖的叶子节点。 这可能是开始重构最好的方式。一旦有了依赖关系图,那么核心思想就是从叶子节点一步一步回溯,直到达到目标。

这种方法强调了撤销操作的重要性,团队不应该害怕因为回退而抛弃一些改变。他还建议不要停止分析,而应该从最基本步骤开始,然后理解顺序。现在他们已经提供了关于“天皇牌”方法的书的草稿版本。

因此,大规模重构很难做,做好这项工作的关键在于要识别出起点,然后沿着路线小步前进。

查看英文原文: How To Do Large Scale Refactoring

2010-08-30 08:474294
用户头像

发布了 340 篇内容, 共 144.9 次阅读, 收获喜欢 13 次。

关注

评论

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

今年国内智能眼镜出货量预计达 290.7 万台;ElevenLabs 推出商用 Eleven Music API丨日报

声网

中烟创新连续两年被认定为国家级科技型中小企业

中烟创新

启信宝宠物行业报告:6年增10倍!超400万家企业抢滩千亿“毛孩子经济”

合合技术团队

人工智能 算法 #大数据

把握TikTok浪潮,这几个策略提升海外营销推广效果

Wolink

海外营销推广 达人营销

摇人有奖 | 一键赢 KWDB 社区限量好礼!

KaiwuDB

数据库 开源数据库 KaiwuDB 分布式多模数据库 KWDB开源数据库

鸿蒙NEXT即时通讯/IM系统RinbowTalk v2.4版发布,基于MobileIMSDK框架、ArkTS编写

JackJiang

鸿蒙 网络编程 即时通讯 IM

督办产品新特性来袭,助力企业高效工作

inBuilder低代码平台

ChatGPT治好了我的拖延症,自由职业如何用AI实现无痛时间管理(附完整提示词)

田威AI

自由职业 时间管理 自律 ChatGPT flowping

收藏!史上最全 Apache SeaTunnel Source 连接器盘点 (2025版),一篇通晓数据集成生态

白鲸开源

大数据 数据同步 数据集成 Apache SeaTunnel Connector

CAD批量测线功能真好用,从1段1段加,到1键全搞定!

在路上

cad cad看图 CAD看图王

荣耀游戏中心新增礼包配置项丨开发加油站

荣耀开发者服务平台

荣耀开发者服务平台 荣耀HONOR 荣耀手机 荣耀游戏中心

小程序容器与SuperApp构建的新晋前端框架技术

xuyinyin

把数套数据传输通道一键“折叠”成 SeaTunnel:同程工程师周晓晨的实战笔记

白鲸开源

大数据 开源 Apache SeaTunnel

数字化转型的关键:MES系统成功部署的六大阶段与避坑指南

万界星空科技

数字化转型 制造业 mes 生产管理MES系统 软件实施

新能源行业用到堡垒机的场景简单分析

行云管家

网络安全 信息安全 堡垒机

区块链Web3开发上线

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

WRC2025 | 澳鹏亮相2025世界机器人大会,以数据之力赋能具身智能新纪元

澳鹏Appen

具身智能 世界机器人大会

2025行云管家成功通过等保三级认证

行云管家

等保 行云管家

邀请函|2025 Altair 教育赋能行动:《有限元基础》课程共建

Altair RapidMiner

人工智能 AI 仿真 CAE 工业设计

海外舆情监测中的“沉默大多数”:非活跃用户态度的挖掘方法

沃观Wovision

舆情监测系统 海外舆情监测

每年省200万?VMware隐性成本拆解与超融合替代实战

智驱前线

vmware 超融合

Wispr Flow 创始人:我曾亲手扼杀硬件梦想,仅剩 5 人团队在裁员阴影下找到 PMF

声网

谙流 ASK × 中国联通:2.25 小时→秒级,存算分离革新数据传输

AscentStream

大数据

为什么跨国企业需要对社交媒体进行监控?

沃观Wovision

社交媒体 海外舆情监控

《SQLAlchemy 2 In Practice》读后感

codists

Python

社交媒体监测如何塑造品牌的国际化传播路径?

沃观Wovision

CAD如何快速测量及结果求和?用好这个功能让你事半功倍

在路上

cad cad看图 CAD看图王

如何进行大规模重构_研发效能_Vikas Hazrati_InfoQ精选文章