代码重复 vs. 错误的抽象

开发者经常面临一个抉择。

你必须在“不要重复自己”(Don't Repeat Yourself)原则与允许一定的代码重复之间做出选择。

DRY 是软件设计中的核心规则。但过度追求它会产生一个新问题:你创造了一个错误的抽象。

错误的抽象比重复的代码代价更高。

我们想要编写优雅的代码。我们想要构建可复用的逻辑。我们希望在一个地方修复 Bug,就能让所有地方都得到修复。这个目标听起来很正确。

但过早的抽象会拖慢项目进度,并破坏代码的可维护性。

当你过早进行抽象时,会面临以下问题:

  • 复杂度增加。糟糕的抽象会增加混乱的层级。
  • 代码僵化。在不破坏其他部分的情况下修改某一部分变得非常困难。
  • 逻辑隐藏。你花在追踪代码上的时间比编写代码的时间还要多。

有时,重复是一种务实的选择。它能保持代码的简洁明了,并允许你独立地更改系统的各个部分。

不要为一个尚未完全理解的问题构建通用解决方案。等到模式清晰后再行动。

出处:https://dev.to/kelvin_kariuki_20f4bec616/developer-take-on-code-duplication-is-far-cheaper-than-the-wrong-abstraction-2016-2k3n