/note/social

DRY(don't repeat yourself)するかしないか、その判断基準について

DRY(don't repeat yourself)するかしないか、その判断基準について - kazuhoのメモ置き場より

僕の理解で言うと、共通するコード片をDRY化することには以下の変化をもたらす。

  • 循環的複雑度は変化しない
  • コールグラフは複雑化する(モジュールをまたぐDRY化を行うと、モジュール間の依存関係も複雑化する*1)
  • 関数内の複雑度は低下する

過剰なDRY化が行われる背景としては、第2点の議論が見落とされがちなんじゃないか、と思ってる。

*1:もしくはより結合度が高まる

上記の3点より、

  • 関数内の複雑度の低下によるメリットが、コールグラフの複雑度の上昇によるデメリットを上回る場合のみ、DRY化を行う
  • モジュール間の複雑性上昇を抑えるため、DRY化はできるだけ局所的に行う*2

*2:つまり、まずは関数内での子関数定義であったり、モジュール内に閉じた関数としてDRY化を実装することを考える