今日はValidatorをどこのパッケージに入れておくべきか、ということを話していました。
前提条件
- 変更はパッケージ内で完結するべき。
- なるべく他のクラスを知らないことが望ましい。
- クラスは一つの責務だけ持つべし。
- Validatorには種類がある
以上の条件を元に、なるべく良い設計を考えます。
Validatorの種類について
1 データ型からありえないもの
データとして明らかにおかしいもの(Priceなのに文字列・マイナス値など。)を予め除去しておくもの。
主にDTOの生成時に検証する。
不正なデータが入力されうるのは、ユーザーからのアクセス、外部APIなど。
2 その処理の中ではありえないもの。
その処理の中で存在してはいけないデータの構造(ID値が重複している・アダルトコーナーに18歳未満がいる、など。)
主にServiceの中で検証する。
基本的にはServiceと対になると思われる。
構成案
1はDTOと同じパッケージ
2はServiceと同じパッケージ
とかに入れておくといいのではと思います。
DTOにValidationを知られたくない気もしますが、これは仕方ないかと。