代码重复 vs. 错误的抽象
开发者经常面临一个抉择。
你必须在“不要重复自己”(Don't Repeat Yourself)原则与允许一定的代码重复之间做出选择。
DRY 是软件设计中的核心规则。但过度追求它会产生一个新问题:你创造了一个错误的抽象。
错误的抽象比重复的代码代价更高。
我们想要编写优雅的代码。我们想要构建可复用的逻辑。我们希望在一个地方修复 Bug,就能让所有地方都得到修复。这个目标听起来很正确。
但过早的抽象会拖慢项目进度,并破坏代码的可维护性。
当你过早进行抽象时,会面临以下问题:
- 复杂度增加。糟糕的抽象会增加混乱的层级。
- 代码僵化。在不破坏其他部分的情况下修改某一部分变得非常困难。
- 逻辑隐藏。你花在追踪代码上的时间比编写代码的时间还要多。
有时,重复是一种务实的选择。它能保持代码的简洁明了,并允许你独立地更改系统的各个部分。
不要为一个尚未完全理解的问题构建通用解决方案。等到模式清晰后再行动。