コードの重複は、誤った抽象化よりも安上がりである
ほとんどの開発者は、早い段階でDRY原則を学びます。「Do Not Repeat Yourself(繰り返すな)」という原則です。
このルールは理にかなっています。エラーを防ぎ、時間を節約してくれます。
しかし、多くの開発者がこのルールを厳格に守りすぎてしまいます。あらゆるものを一つの関数やクラスにまとめようとしてしまうのです。これがオーバーエンジニアリングにつながります。
異なる2つのロジックを無理やり一つの抽象化に押し込めると、問題が発生します。複雑さが増し、コードの可読性が低下します。
誤った抽象化は、多少のコードの重複よりも大きなコストを強います。
コードを重複させれば、ロジックがどこにあるのかを正確に把握できます。一部を変更する必要がある場合は、その場所を変更すれば済みます。
一方、不適切な抽象化を使用していると、それに関連するすべてを変更しなければなりません。現在のタスクとは無関係な機能を壊してしまうリスクが生じます。
安全に進めるために、以下のルールに従ってください:
- 当面のタスクのためにコードを書く。
- 抽象化を行う前に、パターンが3回現れるまで待つ。
- 数行のコードを節約することよりも、可読性を優先する。
- ある程度の重複は健全であると受け入れる。
すべてのコードを完璧にしようとするのはやめましょう。コードを「変更しやすくすること」に集中してください。