構造と振る舞い
ソフトウェアの実体を構成する二つの側面。
Structure(構造)
概念間の結合・依存関係・境界から生まれる制約の総体。
- モジュール間の依存関係と境界
- 概念間の結合によって生まれる不変条件(例:「出荷済み注文には支払い日時が必ず存在する」)
- 技術的制約(プロトコル、データフォーマット等)
個々の概念の内部制約(「金額は0以上」)ではなく、概念間の関係性から生まれる制約に焦点がある。
Behavior(振る舞い)
特定の入力に対する出力、あるいは操作による状態変化。
- APIリクエストに対するレスポンス
- 関数への引数に対する戻り値
- 操作後のシステムの状態
両者の関係
Structure が Behavior を制約する。構造が状態空間を限定すれば、その中で起こりうる振る舞いのパターンも限定される。良い構造は振る舞いの実装を単純にし、検証すべきケースを減らす。
保証手段の対応
| 側面 | 保証手段 |
|---|---|
| Structure | 型システム(静的保証) |
| Behavior | テスト(動的検証) |
両者は二者択一ではなく補完的な関係にあり、Contractはこの両面を境界で約束する。