为什么代码会变成意大利面条
配肉丸和伏特加酱。
听起来是不是很好吃!一大堆扭曲的代码,覆盖着一层过时的需求,还有大量的“不要碰这个”区域,需要几天时间才能消化。
哈哈——也许我把意大利面条比喻得太过火了!
但事实仍然是,只要有足够的时间和新的要求,所有代码最终都会变成意大利面条。那么,我们该怎么做以及如何将其最小化?
从干净到漂亮的代码
干净的代码具有以下特点:
- 很容易阅读
- 一切都有明确的名字
- 函数具有单一职责
- 避免重复以支持可重用性
- 有很好的测试可以演示代码的实际作用
随着时间的推移,这些都变得难以维护。随着项目的发展,旧的代码模式与新的需求不匹配。你最终得到了一个意大利面条代码库。
- 它不是那么容易阅读,因为随着时间的推移,已经添加了一些东西。有大文件或难以导航的代码目录。
- 一开始很清楚的名字已经过时了。该业务现在使用不同的术语,但代码尚未使用这些新名称进行更新。代码的某些部分开始使用缩写或混合搭配术语。
- 起初,在函数本身中添加一小段逻辑或验证似乎很容易。但随着时间的推移,这意味着可以做多种事情的大型功能。它们开始通过调用也执行多项操作的其他函数来产生副作用。
- 有时,有一段现有的代码几乎可以完全满足您的需求,但由于该代码在其他地方用于不同的目的,因此您复制相关部分并创建一个新函数。现在,类似的代码存在于多个地方。
- 重复也会以其他方式潜入代码中。有一段时间没有人来查看多个子类是否实现了相同的接口。这些方法应该存在于父类中,但由于每个子类的实现略有不同,因此需要一些工作。
- 测试仍然存在,但它们仅涵盖某些用例。编写新测试变得越来越困难,因为您必须模拟副作用并注入依赖项。
吃意大利面
摆脱意大利面的最快方法也是首先避免它的最简单方法:吃它。咬一口。
再一次,我过度扩展了这个比喻。
在你修复你的代码之前,你需要了解它在做什么。所以,一点一点地消化意大利面。解开它的一小部分,只是为了看看它是什么样的,以及涉及到什么。
以下是我对如何吃意大利面条代码的建议:
- 清楚你要修复多少意大利面。对重构设置限制。无论多么诱人,都不要超越这些限制。保持较小的更改。
- 确保对现有功能进行了良好的测试。你想要确信你的重构没有破坏任何东西。因此,请预先检查测试套件。
- 解开一小段代码。运行测试。重复。 — 在提交和测试之前,不要对重构太过深入。尽早并经常提交和测试。
- 不要追求完美。对自己清楚,你正在使代码“更好”。它永远不会是完美的。完美的代码不存在。当新版本比旧版本更好并且足以发布时,停止重构。
技术债肉丸
当你注意到意大利面时,这就是技术债务。在技术债务方面,您基本上有三种选择:
- 立即修复它——如果你能在小范围内快速解决它,那么尽你的一份力量让代码比你找到的更好。解开你
- 稍后修复——许多重构需要团队投入和一些时间来做正确的事。将任务添加到待办事项中,以便您从团队成员那里获得帮助,并可以优先考虑重构以及团队计划的其他功能工作。
- 忽略它——在意大利面条代码的情况下,有时可以忽略它。如果它是经过充分测试的意大利面条很少改变,那么什么都不做可能是可以接受的。更多的开发人员需要了解这是一个有效的选项!
更多资源
我之前写过关于 为什么工程很难 , 伟大工程师的小习惯 , 和 选择你的优先级 .
想要提升您的开发生涯?我提供 7 天免费电子邮件指导 .
[_只需 5 美元即可加入 Medium_](https://bennettgarner.medium.com/membership) _- 访问所有媒体 + 支持我和其他人_
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/20766/49300700
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/288066.html