VABの経験
検証のためにプロジェクトで VAB を使用しました。良いと思います。素晴らしいとまでは言いません。これまでのところ大きな問題はありません。私が見つけたのは、私たちのニーズがすぐに解決されなかったため、いくつかのカスタムバリデータを作成する必要があるということでした. だから、それは良い拡張可能です。構成ツールが型を解決できないという問題がありました(依存関係の読み込みのバグだと思います)。コードは正常に実行されますが、ツールを使用せずに構成を行う必要がありました。
数値の一意識別子の検証
あなたは範囲バリデーターで正しい軌道に乗っています。各範囲 (上限と下限) には、包含、排他、無視の 3 つの異なるタイプがあることに注意してください。これは、ほとんどの場合をカバーする必要があります。あなたの場合、上限を無視し、下限を 1 を含むように指定できます (ProductId を 1 以上にしたい場合)。
構成では、これは次のようになります。
<properties>
<property name="ProductId">
<validator lowerBound="1" lowerBoundType="Inclusive" upperBound="0"
upperBoundType="Ignore" negated="false" messageTemplate="Oops...too low." messageTemplateResourceName=""
messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RangeValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Range Validator" />
</property>
</properties>
ビジネス オブジェクト プロパティの検証
あなたは正しい軌道に乗っているように聞こえます。ビジネス (またはサービス) レイヤーへの入力を常に検証する必要があります。クライアント層でも検証を実行する場合は、構成またはエンティティ (ビジネス オブジェクトと呼ばれるもの) を層間で共有できますが、構成またはエンティティが層間で同期されていることを確認する必要があります。2 つの異なる層で検証する場合に考慮すべきもう 1 つのことは、ValidationResults がどのように表示されるかです。VAB は ASP.NET と統合されていますが、ビジネス層を呼び出すと統合されないため、これらのエラーを表示するには別の (カスタム) 方法が必要になります。(これは、エラーをダンプするラベルと同じくらい簡単かもしれません。)
ああ、でも Web 層で検証すると、ASP.NET ですべての検証エラーをキャッチする必要があり、すべてがうまく連携するはずです。真実。しかし、それは私の最後のポイントに私をもたらします。
VABはすべての検証を処理できるかもしれませんが、おそらく複雑な検証を処理することはできません。クロス フィールド (またはクロス オブジェクト) 検証がある場合、VAB はうまく機能しません。また、Web 層では実行したくないカスタム検証がビジネス層で必要になる場合があります (たとえば、一部の検証は、Web 層からアクセスできないデータベースまたは外部サービスに依存する場合があります)。そのため、検証/エラー メッセージを表示するために 2 つの異なる実装が必要になる可能性があります。