3度目のコピペで共通化する

3度目のコピペで共通化する

  • 間が空いてしまいましたがこの記事です
  • ただし、これって何でこう思ったんだっけ?という裏をとれなかった記事です
  • 正直、ちょっとモヤモヤしつつ書いています。。

何がよくないのか?

  • 3度もコピペされるコードは共通化、もしくは抽象化されるべき
  • DRY(Don't repeat yourself)の概念です
  • ですが、YAGNI(You ain't gonna need it)の原則に則って、最初からコピペに対抗することは避けたいです
  • 2つまでは何とかなります。3つ以上のコピペは保守性が圧倒的に下がるので避けましょう

どうすればよかったか?

  • 意味論で同じものを求めるのであれば抽象化しましょう
  • 逆に日付の制御であったり、ファイルを管理するといったものはそれに適した名前を持つクラス/関数を用意しましょう
  • 同じコードを必要とするのであれば、意味論で継承関係を築くことが容易です
  • 意味的に全く異なることを行っているコードを無理に継承関係に落とす必要はありません
  • こういう場合はstaticな関数を用意して挙げましょう

伝えたいこと

  • コピペは2度目まで、もしくはプロジェクトでN度目までと定めましょう
  • 理由としては誰かが書いたコードをコピペしたことであなたがそのコードを保守する責務を負わないため
  • また、そのコードにバグがあった際にコピペ元のすべてのコードがあなたの責任にならない様にするためです
  • そして、共通化でなく抽象化出来るかを先に検討しましょう
  • 抽象化出来るのであれば差分プログラミングが可能となります。そして、似たようなコードは少しの違いを持っています
  • レイヤを適切に整えて、少しの差分だけをコードで表現出来る様にしましょう