契約プログラミング
参考資料
Appendix-1 契約プログラミング概要
契約プログラミングとは
- コードが仕様通りの条件(契約)を満たすことを要求するプログラミング技法
条件とは
事前条件
- サブルーチン開始時に、呼び出し側が保証すべき条件(状態)
事後条件
- サブルーチン終了時にサブルーチンが保証すべき条件(状態)
不変条件
- クラスなどのオブジェクトが外部に公開している操作の開始/終了時に保証されているべき条件(状態)
事後条件について
- メソッドが終了時に保証されるべき条件
- 逆に言えば、あってはならない条件(状態)をチェックする
- ex.
- 結果がマイナスになっていないこと
- データ構造が仕様通りであること
- ビジネスルール上、異常な状態になっていないこと(例えば、未成年にアダルト商品が販売できてしまう、など)
使い処
- 全てのメソッドに契約を定義するのは処理が煩雑になる上、保守性にも悪影響を与える
- 事前条件は入力値バリデーション処理に一任し、以降の処理はバリデーション済みのデータを信用するという考え方はバランスが良い
- 事後条件は複雑な組み合わせチェックが必要なドメインモデルのセルフチェック処理として実装するのが良いかもしれない