全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2020-02-19_换血!重写旧系统的一场噩梦被我亲手终结

您的位置:首页 >> 新闻 >> 行业资讯

换血!重写旧系统的一场噩梦被我亲手终结 作者 | Nicolas Carlo 译者 | 李冬梅 不少工程师对旧项目和代码库谈之色变。但如果旧代码反复遭到黑客入侵,那就躲无可躲,必须提出有效的方案解决这个“不定时炸弹”。 选择重写:噩梦的开始 复杂繁多的应用程序往往牵一发动全身,当你想重做部分应用时,发现其他的应用程序也会受到影响。 更糟糕的是,当你 更改代码 前试图编写单元测试时,发现该代码最初并没有设计成可测试的代码。所以,在进行了种种挣扎和尝试后,你可能就会把这个应用程序冻结起来,再也不想碰它了...... 那么,有没有一种办法既能更改无法维护的代码,又能使局面不那么糟糕呢? 我们知道,更改代码存在一定风险,而重构成本又太高。在这种情况下,从头开始重新编写代码看起来是个不错的主意。 按照这个思路,接下来会发生什么? 你在重写现有应用程序的同时,与管理层讨论一段时间内停用新功能。重写一个包含现在 应用程序 功能的新程序大约耗时 6 个月。几个月后,出现了一个令人讨厌的 bug,并且这个 bug 必须在旧代码中修复。因此,你又修补了旧代码和新代码。再过几个月,公司将一些新功能交付给了客户。但新功能必须用旧代码才能实现,因为新版本尚未准备好。你不仅要再次返回到旧代码中,还要添加一个 TODO 以便这些新功能在新版本中实现。转眼 5 个月过去了,你意识到项目可能要延迟,旧应用程序远比想象得要棘手。7 个月过去了,你开始测试新版本,QA 质量检查发现了很多需要修复的问题。9 个月后,公司再也受不了“不开发功能”。领导开始不满,你为此身心俱疲。你一边挣扎着更改旧代码,一边加快速度重写代码。最终结果是,你做出了两个系统。摆脱旧代码还需要一段时间,因为新代码还没准备好。每个功能都需要在新系统和旧系统中实现两次。 最终,我选择扼杀 我现在的项目,就是在处理这个问题。我们内部有两个并行工作的系统:cart(旧系统)和 booking(新系统)。实际上,booking 应该替换掉 cart。 该项目始于三年前,但三年过去了,项目仍然未完成。 booking 总体上讲要优于 cart,但并不是说所有方面都比 cart 出色,一些购买流程会使用 booking,但仍有很多流程沿用 cart。 现在,由于新旧系统并行工作,所以新功能的实现时间是原来的两倍。有趣的是,由于最初的设计目的并不是为了支持我们想要的新功能,而是因为 booking 有些过时了,所以才会建议“适当重写 cart 系统。” 如果按照这个思路,接下来几个月,我们可能要让两个系统并行运行。显然,这不是个好办法,我还知道另外一种能有效解决系统问题的办法,就是“扼杀”。 如何“扼杀”旧代码库 方法很简单:逐步删除旧的 代码库,使用新的代码库。 具体操作如下: 让新代码充当旧代码的代理服务器(proxy)。用户使用新系统,新系统重定向到旧系统。在新代码库重新实现每步操作,这种操作在终端用户看来没有任何变化。通过让用户使用新功能来逐渐淡化旧代码。删除旧的、未使用的代码。 实际操作 来说说我们的系统,我们有一个用于处理付款的 cart模块。 我们尝试重写,想法是创建一个新的、比 cart 更好的 booking 支付方式。但是这个项目没有 100%交付,因为重写工作耗费了太多时间,我们不得不在旧 cart 系统上开发新功能。 最终,我们还是创建了两个模块。 让我们再试一次,这次我们来“扼杀”cart 模块。与上一种方式不同的是,这次我们引入新 booking 模块作为代理服务器。 设置起来很容易。很快,我们可以在不重复付款处理逻辑的情况下将其交付生产。然后,逐步地,我们可以开始将付款逻辑迁移到新的 booking 模块。 在迁移逻辑时,我们摆脱了 cart 模块上未使用的代码。这个过程可能会需要一段时间,但我们正逐渐摒弃掉旧的、难以维护的 cart,开始应用新的、更好的 booking。 结束语 这样做最好的地方是可以解决重写期间无法交付新功能的问题。使用这种技术,无需复制代码,更无需实现两次新功能。另外,你需要尽快将新系统投入使用,更快地获得反馈,最大程度减少工作量并且降低把事情搞砸的风险。 最后,你可以有条不紊地进行重写,而无需将代码冻结 6 个月。尽管“扼杀”可能带有暴力色彩,但这种隐喻恰恰描述了慢慢摆脱旧系统的方法,与完全转换相比,这样做的风险较小。当旧代码实在难以使用时,这可能是迈向更好设计的第一步。 如果你在从事领域驱动设计(DDD),我建议你采用这种方法逐步淘汰旧系统。 你可以将旧系统视为黑匣子,创建一个 Bubble Context ,在其中应用部署 DDD 原理。Bubble Context 与旧系统进行交互。逐渐地,新功能将在不断增长的 Bubble context 中实现。同时,业务中用到旧系统的机会也越来越少,直到有一天,你可以彻底关闭旧系统。 参考链接:https://understandlegacycode.com/blog/avoid-rewriting-a-legacy-system-from-scratch-by-strangling-it/ 活动推荐 2020被称为是人工智能爆发的拐点,在这个人工智能行业百花齐放的时代,如何才能脱颖而出在风口上站稳脚跟?而在智能金融、知识图谱、计算机视觉等热门领域,一线大厂又做了哪些“大动作”呢? AICon2020上海本次邀请到了依图科技CTO颜水成、京东云与 AI 总裁&京东集团技术委员会主席周伯文、小米集团副总裁&技术委员会主席崔宝秋等一众大咖坐镇,现在售票限时7折,如果有任何问题欢迎咨询我们票务小姐姐:18514549229(同微信)点击阅读原文了解更多 今日荐文点击下方图片即可阅读 这一次,美国试图阻断全球企业向华为出售芯片 你也「在看」吗??? 阅读原文

上一篇:2024-10-23_如何通过KV稀疏实现对vLLM的1.5倍加速 下一篇:2020-09-09_提到数据库一致性,每个开发人员都应该知道这些

TAG标签:

20
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价