契約による設計
#設計
#バリデーション
https://ja.wikipedia.org/wiki/契約プログラミング
https://speakerdeck.com/dnskimo/qi-yue-niyorushe-ji-shi-shi-me
オブジェクトのデータ構造とそのメソッドの利用に関する条件を形式的に表明したもの
契約は、コードの利用条件が満たされることによって成立する。
条件は、満たすべきタイミングと主体によって、以下の3種類に分けられる
1.
事前条件
メソッドの開始時に呼ぶ側で保証すべき性質
2.
事後条件
メソッドの終了時に保証すべき性質。
3.
不変条件
メモ
オブジェクトの振る舞いが想定外となる場合の責任の所在が明らかとなる
事前条件違反なら利用側
事後条件違反、不変条件違反ならオブジェクト側
実行時エラー
は契約破棄として、例外を投げる
関連
Parse, don’t validate
カプセル化
GraphQLはdirectiveで事前条件、事後条件を表現できる