プログラムの外部との境界で、仕様を満たしたデータ型に変換する
外部のデータ構造は信用できない
外部は外部の勝手で構造が設計され、修正される
間違っているデータが来ることもある
それを境界でチェックする
汚いデータは整形し
間違っているデータは拒否する
内部に理想世界を築こう

これのおかげでvalidation漏れが起きない
絶対にparseして、データ構造を変換しないと内部に渡せない
外部の入力の例
userによるformへの入力
HTTP Request/Responseとして受け取った値
DBから取得した値
何が嬉しいか?
handlingの煩わしさを解決できる
内部に汚いデータを持ち込んだ場合でも、プログラムで使用する前にvalidationなどを行うはず
それは失敗しうる
Maybe
で表現したり、 throw
することになる
Maybe
と
throw
のhandlingの仕方は全く異なるけど、handlingがダルいことは共通している

内部の至るところでhandlingが必要になる
境界でやってしまうことで、handling処理を一箇所にまとめることができる
仕様を満たすチェックをすることを強制できる
validationは必ず行う必要があるが、その数が多いと漏れる可能性がある
そこで、内部の関数を
仕様を満たした型しか受け付けないようにしておけば、checkを漏らす可能性が消える
参考
境界で全部 parse
しろ、という主張