1

エンタープライズ ライブラリの検証アプリケーション ブロックを使用した人はいますか? 何か成功?

とにかく、私の質問は数値の一意の識別子の検証に関するものです。製品の一意の識別子を表す ProductId プロパティを持つ Product クラスがあるとします。数値です。この識別子は 1 未満にすることはできず、1 より大きくする必要があります。検証アプリケーション ブロックを使用してどの検証タイプを選択するかはわかりません。範囲型を試してみようと思ったのですが、下限値と上限値の2つの値が必要です。

ビジネス オブジェクト プロパティの検証に関するもう 1 つの質問です。これは、ビジネス オブジェクトをテストするための最良の方法ですか? 検証ルールを 1 回だけ指定してから、ASP.NET などのさまざまなレイヤーで使用したいと考えています。クライアント側だけで、この方法でビジネスオブジェクトを検証したことはありません。誰かが私に行くのに最適なルートは何か、そして私が正しい方向に進んでいるかどうか教えてもらえますか?

誰かがアドバイスできますか?

ありがとうブレンダン

4

2 に答える 2

2

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 つの異なる実装が必要になる可能性があります。

于 2009-12-07T02:25:04.707 に答える
0

バリデーターの上限を、使用しているタイプの最大値に等しく設定しないのはなぜですか?

たとえば、 を使用している場合は、次のようInt32にします。

[RangeValidator(1, RangeBoundaryType.Inclusive, 
Int32.MaxValue, RangeBoundaryType.Inclusive)]

ベスト プラクティスとしては、検証を一元化することは常にトリッキーな作業であり、Enterprise Library ブロックはこの問題に対する非常に優れたソリューションです。このアプローチは問題ないと思いますが、制限があります (この問題を解決しようとするすべての試みと同様)。

于 2009-12-06T14:57:11.330 に答える