コードの重複 vs. 不適切な抽象化

開発者はしばしば選択に悩まされます。

「Don't Repeat Yourself(DRY)」原則に従うか、あるいはある程度のコードの重複を許容するか、そのどちらかを選ばなければなりません。

DRYはソフトウェア設計における核心的なルールです。しかし、それを追求しすぎると新たな問題が生じます。それは「不適切な抽象化」を生み出してしまうことです。

不適切な抽象化は、コードの重複よりも大きなコストを強います。

私たちはエレガントなコードを書きたいと考えています。再利用可能なロジックを構築したいと考えています。一箇所でバグを修正すれば、すべての箇所で修正が反映されるようにしたいと考えています。この目標は、一見正しいものに感じられます。

しかし、時期尚早な抽象化はプロジェクトのスピードを削ぎます。そして、コードのメンテナンス性を損なわせます。

早すぎる抽象化を行うと、以下のような問題に直面します:

  • 複雑性の増大。不適切な抽象化は混乱の層を増やします。
  • コードの硬直化。一部を変更しようとすると、他の部分まで壊れてしまうようになります。
  • ロジックの隠蔽。コードを書く時間よりも、コードを追跡(トレース)する時間の方が長くなってしまいます。

時として、重複を受け入れることが現実的な選択肢となります。それによってコードはシンプルかつ明快に保たれ、システムの各部分を独立して変更できるようになります。

まだ十分に理解できていない問題に対して、汎用的な解決策を構築しないでください。パターンが明確になるまで待つのです。

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