一般的な EF+MVC システムには、2 つまたは 3 つのレベルの検証があります。
- ViewModel の場合: 入力/物理検証 (DataAnnotations、FluentValidation)、つまり、長さ、null、範囲、正規表現など。
- モデルの場合: 入力/物理的検証 (MVC が使用されておらず、データが別のシステム、WCF、フォームなどから取得される場合は 1 を繰り返します)
- モデルの場合: 論理/「ビジネス ルール」の検証
実際のモデル/エンティティ/ドメイン/「ビジネス ルール」の 2+3 の検証に関するベスト プラクティスが見つかりません。私たちは次のいずれかを行います:
- エンティティのプロパティ セッターに単純な検証ルールを配置します (ただし、これは非常に厄介です)。
- EF の
SaveChanges()
にフックし、エンティティがAdded
またはModified
の状態にある場合は、検証をトリガーします (エンティティ全体を一度に検証します)。
これは維持するのが難しいです。ViewModel の検証には多くの考慮が払われましたが、Model の検証はドメイン固有であるため、クリエイティブなソリューションを決定するのはユーザーであり、私のものはそれほど優れていません。
- これを行うためのより良い方法や便利なツール (おそらく DataAnnotations や FluentValidation などですが、ドメイン エンティティ用) はありますか?
- モデルの検証を行う、またはモデルの検証をトリガーするのに最適な場所はどこですか?