Validation Application Block

EntLib3から追加されたValidation Application Block(以下VAB)について。

  • 用途

VABは値の検証を行うためのApplication Blockです。オブジェクトのプロパティ、メンバ、メソッドの実行結果に対して検証を行います。
検証の対象となるオブジェクトと、検証を行う側に分けて説明します。

検証の設定方法

検証の設定方法として、下記の方法が用意されています。

  • 属性による設定
  • 構成ファイルによる設定
  • 検証メソッドによる設定
属性による設定

検証対象のクラスに含まれるフィールド、プロパティ、メソッドに対してMicrosoft.Practices.EnterpriseLibrary.Validation.Validators.ValidatorAttributeから派生した検証属性を付加します。検証属性はひとつの項目に複数付加することも可能です。

public class TestData
{
  ...
  [StringLengthValidator(10)]
  public string Data1
  {
    get { return data1; }
    set { data1 = value; }
  }

  [StringLengthValidator(5)]
  [RegexValidator("^a")]
  public string Data2
  {
    get { return data2; }
    set { data2 = value; }
  }
  ...
}

上記の例では、Data1が10文字以下、Data2がaで始まる5文字以下という検証を行うことになります。

構成ファイルによる設定

属性で設定するかわりに、構成ファイルを使用して検証を設定することも可能です。
上記属性と同様の設定を行った際のイメージを挙げます。

対象クラス、ルールセット名、対象メンバ、検証の順にノードを設定します。

検証メソッドによる設定

もっと複雑な検証や、複数メンバ間の検証に対しては、検証メソッドを指定することも可能です。

[HasSelfValidation]
public class TestData
{
  ...
  [SelfValidation]
  public void ValidateThis(ValidationResults results)
  {
    if (string.Compare(Data1, Data2) < 0)
      results.AddResult(new ValidationResult("Data1がData2より小さい", null, null, null, null));                
  }
  ...
}

HasSelfValidation属性をクラスに、SelfValidation属性を検証メソッドに付加することにより、検証メソッドを用いた検証が行われます。検証に失敗した際に、ValidationResultsに失敗の内容を表すValidationResultオブジェクトを追加します。
上記の例では、Data1がData2より小さいときに検証が失敗します。

検証方法

検証は、簡単なコードを記述することによって行うことができます。

TestData data;
... // dataに値を設定する
ValidationResults r = Validation.Validate<TestData>(data);
if (r.IsValid) {
...

上記例で出てくるTestDataクラスのオブジェクトを検証しています。