たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

3rd merge principle; 3rdマージ原則

Write a feature, Copy it for another usage, then Merge them for 3rd common use case.
機能を書き、次の利用時はコピペし、3度目の共通用途になったらマージしろ.

3rd merge principleは早すぎる共通化を戒めるプラクティス.

同じ動作をするコードが2度現れるとプログラマーは共通化したくなる.
しかし共通化において最も重要なことは「機能的凝集である」こと.
人間は不完全なので、真に機能的凝集かすぐに判断できない.
まずはコピペし、実戦での機能追加・削除を経て、更に他で利用される段になれば、本当に機能的凝集な部分が判断できる.
多くの場合、似た動作はしていたがちょこちょこ差異があって本質的に異なり良い抽象化がないと気づく.
もし早すぎる共通化をしていたら、機能切り替えフラグだらけの神関数と化していた可能性が高い.
まずコピペし、実戦で磨け. 3回目の登場で良いmergeをしろ.

参考概念

  • 良い抽象化
    • 機能的凝集
    • 関心の分離
    • 単一責任原則
  • 悪い共通化
    • 論理的凝集
  • 通化したくなったら