検証するデータの出所を必ずしも気にしない検証サービスを使用するのが好きです。これは、検証ルールをクライアント (つまり Web ページ) に送信する部分に到達すると、いくつかの異なる方法で機能しますが、これの最も重要な側面は、実際の検証ルールに対して単一の権限を持つことだと思います。
たとえば、Validate メソッドを介してチェックされる ValidationRule オブジェクトのコレクションなど、データ コア エンティティに検証ロジックがある場合 (非常に典型的なシナリオ)、変換を介してそれらの同じルールをクライアント (javascript) に昇格させます。
ASP.NET の世界 (私が話すことができる唯一の世界) では、これを行う方法がいくつかあります。私が好む方法は、エンティティのフィールド (およびすべての検証ルール) に UI ウィジェットを結び付けるカスタム バリデータを作成することです。これの利点は、すべての検証ロジックを単一のバリデーターにバンドルできることです。欠点は、検証ルールがすべて一度にテストされるため、検証メッセージが密になることです。もちろん、これは、検証ロジックが最初の失敗などの言及のみを返すようにすることで軽減できます。
この答えは、漠然としていて不明確に聞こえるかもしれませんが、私が言いたい 2 つのポイントは次のとおりです。
- 検証は、データが入力され、コミットされるポイントのできるだけ近くで行う必要があります。
- 検証が発生する場合は常に同じ検証ルールを使用する必要があります。クライアント側の検証に合格した場合、後で検証に失敗することはありません (保存前のビジネス ルール、外部キー違反など)。