Structureの制約性
Structure が Behavior を制約する——ソフトウェアにおける構造と振る舞いの根本的な関係。
定義
- Structure:概念間の結合・依存関係・境界から生まれる制約の総体
- Behavior:特定の入力に対する出力、操作による状態変化
Structure が状態空間を限定すれば、その中で起こりうる Behavior のパターンも限定される。
具体例
「出荷済み注文には支払い日時が必ず存在する」という構造的制約があれば:
- 「出荷済み注文の支払い日時を取得する」という振る舞いは常に成功する
- nullチェックという分岐が不要になる
- テストケースも減る
逆に、この構造的制約がなければ、振る舞いの実装に分岐が必要になり、検証すべきケースが増える。
帰結
- 良い構造は振る舞いの実装を単純にし、検証すべきケースを減らす
- テストの肥大化は構造の問題のシグナルであって、テストの問題ではない
- 偶有的複雑性の多くは構造の弱さから生まれている
設計への示唆
コードに落とす段階では「構造を先に、振る舞いを後に」が有効。型(構造)を先に定義すると、その型に沿った振る舞いしか書けなくなり、コンパイラがガードレールとして機能する。