コナーセンス
ソフトウェア設計における変更の波及関係を表す概念。Meilir Page-Jonesが1996年に提唱。結合度をより精緻に分類・分析するための枠組み。
「あるコンポーネントを変更したとき、別のコンポーネントも変更しないと正しく動作しない」という依存関係の性質を指す。
分類
静的コナーセンス(ソースコードレベル)
| 種類 | 説明 | 例 |
|---|---|---|
| 名前のコナーセンス | 同じ名前を参照 | 関数名、変数名 |
| 型のコナーセンス | 同じ型を期待 | 引数の型 |
| 意味のコナーセンス | 同じ値の解釈 | マジックナンバー |
| 位置のコナーセンス | 引数の順序 | 位置引数 |
| アルゴリズムのコナーセンス | 同じアルゴリズムを使用 | ハッシュ関数 |
動的コナーセンス(実行時)
| 種類 | 説明 | 例 |
|---|---|---|
| 実行のコナーセンス | 実行順序の依存 | 初期化順序 |
| タイミングのコナーセンス | 実行タイミングの依存 | 競合状態 |
| 値のコナーセンス | 複数の値が連動 | 開始日と終了日 |
| 同一性のコナーセンス | 同じ実体を参照 | シングルトン、DB行 |
同一性のコナーセンス
複数モジュール間で共有される実体の一貫性維持が必要となる状況:
- データベーステーブルの排他処理
- グローバル変数
- シングルトン
これは最も強い(悪い)動的コナーセンスであり、可能な限り避けるべき。
設計指針
- 強いコナーセンスを弱いものに置き換える
- コナーセンスをカプセル化境界内に閉じ込める
- 境界を越えるコナーセンスを最小化する
結合度との関係
コナーセンスは結合度の概念を拡張・精緻化したもの。結合度の7段階分類は主に静的な関係を扱うが、コナーセンスは動的な依存関係も体系的に扱える。
関連
参照
- 結合とコナーセンスに関する考察 - 制御結合の問題点とポリモーフィズムによる解決策