软件开发中的决策:权衡与取舍
上QQ阅读APP看书,第一时间看更新

第2章 代码重复不一定是坏事:代码重复与灵活性的权衡

本章内容

在相互独立的代码库间共享通用代码

代码重复、灵活性与产品交付之间的取舍

在松耦合的情况下,代码重复是否是一个合理的选择

不要写“重复”代码(Don’t Repeat Yourself,DRY)原则是软件工程领域最广为人知的程序设计原则之一。其主要的思想是消除重复的代码,这将有助于减少缺陷,提升软件的可重用性。不过,如果我们构建系统时只一成不变地照搬DRY原则,结果可能是很危险的,因为这会带来很高的复杂性。如果我们构建的是单体系统,即几乎所有代码都存放在同一个代码库中,遵守DRY原则要容易得多。

现代软件系统在持续演进,我们常常需要构建分布式系统,这些分布式系统通常由多个独立部分构成。在这种架构中,减少代码重复需要考虑更多方面的影响,譬如,是否会导致组件间的紧耦合、是否会降低团队的开发效率等。如果一段代码在多个地方被使用,这段代码的变更往往需要经过大量的沟通协调。如果需要在团队之间进行协调,交付业务价值的速度就会降低。本章会讨论涉及代码重复的模式与取舍。我们试图回答:在什么情况下代码重复是一种明智的选择,什么情况下应该尽量避免代码重复?

我们从两个独立代码库存在部分重复代码的情况说起。之后,尝试以共享库的方式,消除重复代码。接着,我们会采用新方法来解决这一问题,即用微服务封装抽取的通用方法。最后,我们尝试用继承消除代码中的重复逻辑,然而,我们会发现这种方法也有难以忽略的开销。