写点什么

重构?还是重写?

  • 2009-11-28
  • 本文字数:1232 字

    阅读完需:约 4 分钟

重构和重写的目标,都是要通过提高的代码的可读性、结构和清晰性,从而提高系统的健壮性。清晰的代码更易于维护和改善。然而,在很多情况下,敏捷团队会难以在二者之间做出选择。

代码会随着时间的流逝变得越来越差, Michael Dubakov 为此指出了下面的原因:

  • 越来越多的特性。它会导致复杂度的提升。
  • 捷径和权宜之道。为了支持诸如”我们在八月份需要这个 NB 的搜索,没二话”之类的特性
  • 开发者轮换。新的开发者根本不知道架构之后的所有起决定性作用的决定和主意。知识不可避免地随着人员的轮换而流失。
  • 开发团队的扩大。更多的人导致更少的交流,更少的交流产生糟糕的决定。

Michael 建议,虽然重构和重写都会使代码更加清晰,但是这两种技术都会导致现有系统的混乱。重构是一种增量式的活动,因此它每次只会接触到系统的一部分。这会在局部造成混乱,可能还比较容易控制。而另一方面,重写是更具有攻击性的改变,它会导致系统中更大的混乱。由于它会造成更广泛的影响,因此要想让重写的影响稳定下来,时间要比重构长得多。

我们重写旧的系统,因此混乱是家常便饭。在公开发行之后,混乱显著增长。我们预料会出现很多新的(和旧的)缺陷和古怪的行为,因此稳定期会更长

Peter Schuh 认为团队经常会将两个词彼此替换使用,从而导致更多的迷惑和混乱。团队应该知道:和重构相比,重写更具有风险,因此应该恰当地使用术语。据他所说:

那只是语义上的。然而,在一些人受到伤害之前那只是语义上的。重写代码很有风险,并且有时会付出痛苦的努力,这么做不一定总有光明的结尾。如果我们执行重写,但是把它叫做重构,并且整个过程以梨形(指越到后来问题越多,需要付出的时间和成本也随之增长)进行,那就不会有业务人员停下来考虑语义了。他们只是会在下次听到重构这个词的时候退缩。

Guido A.J. Stevens 的想法很有趣,他认为问题并非出在重构和重写之间,而是在于:或者重构,或者重写并重构。他提出:即使当团队决定重写系统的时候,最终他们也会有两个系统并行运行。旧系统需要重构,而新系统正在被重写。这种组合变成了一项极度复杂的任务,据他所说:

维护老化的代码基础,并且编写新的系统,将会耗尽你的资源。你的团队被分割,并导致延迟。你需要制定计划,小心翼翼地执行转换。同时,你所面临的上市时间问题在你的竞争对手身上不存在,他们还会试图挖走你的客户。如果你能正视这种现实,并仍然想把公司前途押在重写上,那么你也许有机会成功。

Naresh Jain 对于遗留代码有下面特别的的建议。当代码难于理解,并且团队不能确定它做什么的时候进行重构。当很清楚知道代码做什么,但是很难理解那些代码的时候就重写。

因此,重构是不断提升系统更好的方式。它是慢速前进的,通过小的、经常的提升来提高质量。重写也有其自身的优势,然而在很多情况下它是一种有风险的选择,并且团队可能永远都不确定产出物的情况。正如“Joel 说软件”中所说:

重要的是要记住,当你从零开始的时候,没有绝对的理由相信你会比你第一次做得好。

查看英文原文: Refactor or Rewrite?

2009-11-28 07:096181
用户头像

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

关注

评论

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

【2月13日 - 3月14日】TiCDC 新架构试用通道正式开启,全新升级,抢先体验,多重参与奖励等你拿!

TiDB 社区干货传送门

龙蜥 2024 年度“最佳合作伙伴”揭晓!申威、AMD 等多家新晋贡献厂商实力登榜

OpenAnolis小助手

操作系统 龙蜥社区 OpenAnolis 龙蜥社区年度优秀贡献者

电子签借贷真实吗?315报道引发的行业地震!电子签到底冤不冤?

易成研发中心

电子签高利贷实况解读:央视3·15乌龙曝光,电子签行业替高利贷买单

易成研发中心

TiCDC 新架构 v9.0.0 使用实践

TiDB 社区干货传送门

TiCDC新架构

用 tcpdump 分析 Java 客户端的 prepare 行为

TiDB 社区干货传送门

性能调优 故障排查/诊断

海信洗衣机闪耀AWE:三筒品类开创者亮剑,大咖嘉宾连连盛赞

新消费日报

深入探究小红书笔记详情页面数据采集接口​

tbapi

小红书笔记详情接口 小红书API

数字化转型投入大、见效慢?中小企业该如何应对?

天津汇柏科技有限公司

数字化转型

CST软件如何用天线远场计算Group delay延时

思茂信息

cst CST软件 CST Studio Suite

保姆级离线 TiDB V8+ 解释

TiDB 社区干货传送门

8.x 实践

重识 APO:DeepSeek 掀起可观性领域变革 | 龙蜥生态

OpenAnolis小助手

AI 系统运维 apo 龙蜥生态 DeepSeek

探秘能源行业AI密码:云鼎科技用大模型实现了″四个转变″

Alter

在京东做技术是种什么体验?| 13位零售人告诉你答案

京东零售技术

“官方网站+公开课程”双赋能,鸿蒙游戏开发者服务焕新升级

最新动态

高性能网络SIG双月动态:加速 SMC eBPF 透明替换特性上游化进程,并与上游深度研讨新特性

OpenAnolis小助手

操作系统 龙蜥社区 smc 龙蜥SIG月报

SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace

OpenAnolis小助手

AI 可观测性 SysOM 龙蜥系统运维联盟 livetrace

今日最新消息!黑龙江网络安全等级保护备案新规定,速看!

黑龙江陆陆信息测评部

龙蜥社区第六届理事大会成功举行,共话技术创新与生态合作

OpenAnolis小助手

开源 龙蜥社区 OpenAnolis 龙蜥社区理事大会

高性能存储SIG月度动态:erofs快照器合入containerd社区,ANCK支持virtio-blk直通

OpenAnolis小助手

操作系统 高性能存储 龙蜥社区 龙蜥社区SIG EROFS

这些搜索技巧你不会?

Immerse

《Operating System Concepts》阅读笔记:p449-p459

codists

操作系统

【宣法·3.15特辑】电子签怎么跟套路贷混为一谈了?

易成研发中心

电子签名

《汽车电机MES系统实战指南:打造柔性化智能产线的4大核心模块与3项关键技术突破》​

万界星空科技

mes 制造业工厂 电机MES 汽车电机 汽车电机mes

重塑家庭观影标准,海信激光电视探索X1斩获艾普兰奖

新消费日报

SPC统计过程管理系统(源码+文档+讲解+演示)

深圳亥时科技

使用DataWorks Notebook实现智能图片标注,给你的图片加个“注释”

阿里云大数据AI技术

大数据 数据分析 ETL 多模态 Dataworks

多智能体强化学习的算力调度创新,让每一份算力都创造广告价值 | 京东零售技术实践

京东零售技术

Karmada v1.13 版本发布!新增应用优先级调度能力

华为云开发者联盟

容器 云原生 集群 Karmada

荣耀时刻!第二届开放原子大赛-OS Copilot 学习赛获奖名单新鲜出炉

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙蜥赛事

5步教你创建大模型自定义插件

阿里技术

大模型 自定义插件 LLM

重构?还是重写?_研发效能_Vikas Hazrati_InfoQ精选文章