特集
Enterprise Library 3.0概説(後編)

EntLib 3.0の注目の新機能を実装サンプルで見てみよう

アバナード株式会社 市川 龍太(Microsoft MVP − Solutions Architect)
2007/07/13
Page1 Page2 Page3 Page4

Self Validation機能

 VABが標準で提供している各種Validatorクラスでは検証しきれないような複雑なパターンの検証が必要になった場合や、特定の検証を必ず行いたい場合などはSelf Validation機能を使うとよい。

 Self Validation機能を使用するには、対象となるクラスにHasSelfValidation属性を付与して、実際に検証を行うメソッドにはSelfValidation属性を付与する。これにより、上記サンプル・プログラムでも使用した(AndCompositeValidatorオブジェクトなどの)Validateメソッドが実行されるときに、そのSelfValidation属性を付与したメソッドが必ず実行されるようになる。

 以下にサンプル・プログラムを示す。

[HasSelfValidation]
public class Customer3
{
  private string firstName;
  private string lastName;
  private string email;

  public string FirstName
  {
    get { return firstName; }
    set { firstName = value; }
  }

  public string LastName
  {
    get { return lastName; }
    set { lastName = value; }
  }

  public string Email
  {
    get { return email; }
    set { email = value; }
  }

  [SelfValidation]
  public void DoValidate(ValidationResults results)
  {
    if (string.IsNullOrEmpty(FirstName) ||
        string.IsNullOrEmpty(LastName))
    {
      ValidationResult result = new ValidationResult(
        "姓と名は必須入力項目です",
        typeof(Customer3), "", "", null);
      results.AddResult(result);
    }
  }
}

static void Main(string[] args)
{
  Customer3 customer = new Customer3 ();
  ValidationResults results = Validation.Validate(customer);
}
Self Validation機能を使用したサンプル・プログラム

 このサンプル・プログラムでは、Customer3クラスのオブジェクトを引数としてValidationクラスのValidateメソッドを呼び出すと、SelfValidation属性が付与されたメソッド(ここではDoValidateメソッド)が実行されるのである。

 このようにVABが標準で提供しているValidatorクラスにSelf Validation機能を組み合わせることで、柔軟な検証処理を行うことが可能になる。

ASP.NET統合

 Webページから入力された値を検証する場合は、ASP.NETが標準で提供している検証コントロール(RequiredFieldValidatorコントロールなど)を使用することになるが、実はVABにもASP.NET用のValidator属性が提供されている。

 まずは以下のサンプル・プログラムを見てもらいたい。

public class Customer4
{
  private string firstName;
  private string lastName;
  private string email;

  [StringLengthValidator(1, 10, Ruleset="RuleSetA", MessageTemplate = "名は1文字以上10文字以下です")]
  public string FirstName
  {
    get { return firstName; }
    set { firstName = value; }
  }

  [StringLengthValidator(1, 10, Ruleset="RuleSetA", MessageTemplate = "姓は1文字以上10文字以下です")]
  public string LastName
  {
    get { return lastName; }
    set { lastName = value; }
  }

  [RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", MessageTemplate = "不正なメールアドレスです")]
  public string Email
  {
    get { return email; }
    set { email = value; }
  }
}
ASP.NET統合Validator属性を使用するためのサンプル・プログラム

 次にWebページに以下のコードを記述する。

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<EntLib:propertyproxyvalidator
  id="firstNameValidator" runat="server"
  ControlToValidate="TextBox1"
  PropertyName="FirstName"
  RulesetName="RuleSetA"
  SourceTypeName="BusinessEntity.Customer4" />
WebページでValidator属性を使用するためのサンプル・コード
サンプル・アプリケーションとしてテキストボックスを1つだけ配置したページを持つWebアプリケーションを想定している。

 このWebページでボタン押下などによるポストバック処理が発生すると、Customer4クラスのFirstNameプロパティに定義されているValidator属性と同様の検証処理が、テキストボックスに入力された文字列に対して実行されるのである。

 ただし現時点ではVS 2005のデザイン画面でコントロールとしてEntlib 3.0の検証機能を追加できないため、上記のようなタグを手書きで追加する必要があることに注意していただきたい。なお、VABはASP.NET用以外にもWindowsフォーム用のValidatorクラスなども提供している。

 さて、ここまでVABが提供するさまざまな機能について紹介してきたわけだが、VABは次期Visual Studio 2008(コード名“Orcas”)以降において、特に重要な位置付けになると筆者は考えている。というのもVisual Studio 2008からはLINQが実装されたC# 3.0、そしてADO.NET Entity Frameworkが提供される予定であり*1、これら新テクノロジの登場は従来の.NETにおいて一般的だったデータセットとテーブルアダプタの組み合わせというスタイルから、カスタム・クラスとO/Rマッピング(=オブジェクトとデータベース・テーブルをマッピングする開発技術)というスタイルに一変する可能性が高い。この後者のスタイルにおいてVABは非常に有効なキー・アイテムとなり得るだろう。

*1 LINQについては「動的プログラミング言語へと発展するC# 3.0とVB 9.0」を、ADO.NET Entity Frameworkについては「ADO.NET Entity Framework の概要」を参考にするとよい。
 

 INDEX
  [特集]Enterprise Library 3.0概説(前編)
  自身のセオリーから飛び出した新生EntLib 3.0とは?
    1.EntLib 3.0とは?
    2.EntLib 2.0と3.0の相違点
    3.EntLib 3.0から新しく追加された機能(1)
    4.EntLib 3.0から新しく追加された機能(2)
 
  [特集]Enterprise Library 3.0概説(後編)
  EntLib 3.0の注目の新機能を実装サンプルで見てみよう
    1.Validation Application Block(VAB)
  2.VABのSelf Validation機能/ASP.NET統合
    3.Policy Injection Application Block(PIAB)
    4.Application Block Software Factory(ABSF)
 
インデックス・ページヘ  「Enterprise Library」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間