結合度¶
要約¶
結合度の評価軸として「強度・距離・変動性」の3つがある。これらは直交していないが、それぞれ独立して結合のつらさを評価できる。重要な知見は「辛み = 強度 × 変動性 × 距離」であり、3変数のうち1つを十分小さくすれば全体の辛みを抑えられるという視点。DDD の集約・境界づけられたコンテキスト・腐敗防止層はいずれもこの式のいずれかの変数を下げる設計パターンとして解釈できる。
ポイント¶
- 強度の分類: 内容結合 > 共通結合 > 制御結合 > スタンプ結合 > データ結合(強い順)
- 変動性の分類: Operational / Development / Semantic / Functional / Incidental の5種。意味的(Semantic)結合が特に厄介
- 辛み = 強度 × 変動性 × 距離: 集約は「距離=メソッド間」で近いため強度・変動性が高くても辛くない。腐敗防止層は強度を下げる
- 意味的結合の解消: SKU のようにコアコンセプトを複数システムが共有するとき、概念を分解して各システムが必要な属性だけを扱うようにする
- Nygard の警告: 「下流のシステムを全体の概念に結びつけるべからず」。意味的結合は辛み以前にそもそも設計の問題
結合パターン比較(変動性観点)¶
| 方式 | Operational | Development | Semantic | Functional |
|---|---|---|---|---|
| SMTP | 強 | 弱 | とても強 | とても弱 |
| RDBMS直参照 | とても強 | とても強 | とても強 | 弱 |
| RESTful API | 強 | 強 | とても強 | 弱 |
| メッセージング | とても弱 | 弱 | 強 | 中 |