コンテンツにスキップ

結合度

要約

結合度の評価軸として「強度・距離・変動性」の3つがある。これらは直交していないが、それぞれ独立して結合のつらさを評価できる。重要な知見は「辛み = 強度 × 変動性 × 距離」であり、3変数のうち1つを十分小さくすれば全体の辛みを抑えられるという視点。DDD の集約・境界づけられたコンテキスト・腐敗防止層はいずれもこの式のいずれかの変数を下げる設計パターンとして解釈できる。

ポイント

  • 強度の分類: 内容結合 > 共通結合 > 制御結合 > スタンプ結合 > データ結合(強い順)
  • 変動性の分類: Operational / Development / Semantic / Functional / Incidental の5種。意味的(Semantic)結合が特に厄介
  • 辛み = 強度 × 変動性 × 距離: 集約は「距離=メソッド間」で近いため強度・変動性が高くても辛くない。腐敗防止層は強度を下げる
  • 意味的結合の解消: SKU のようにコアコンセプトを複数システムが共有するとき、概念を分解して各システムが必要な属性だけを扱うようにする
  • Nygard の警告: 「下流のシステムを全体の概念に結びつけるべからず」。意味的結合は辛み以前にそもそも設計の問題

結合パターン比較(変動性観点)

方式 Operational Development Semantic Functional
SMTP とても強 とても弱
RDBMS直参照 とても強 とても強 とても強
RESTful API とても強
メッセージング とても弱

参照元