特集
Enterprise Library 2.0新機能

Enterprise Library 2.0を特徴づけるDI機能とは

アバナード株式会社 市川 龍太(patterns & practices Champion
2006/04/01
Page1 Page2 Page3

●Configuration Helper Classes and Design-time Components

 従来のEntLibではConfiguration Application Block(以下ConfigAB)が構成ファイルから設定値を読み込み、各Application Blockへパラメータとして受け渡す処理を行っていたのだが、EntLib 2.0からはそのConfigABがなくなり、代わりにConfig Helperが同様の処理を行うように再構成された。

 Config Helperは内部でSystem.Configuration名前空間以下のクラスを利用することで、各Application Blockの設定値をアプリケーション構成ファイル(Web.configまたはApp.config)だけで設定できるようになっている。さらにConfigurationコンソールでConfiguration Sourcesを設定すれば任意のファイルを各Application Block用構成ファイルとして設定できるようにもなっている。

 従来のEntLibでは各Application Blockの振る舞いを設定する場合はアプリケーション構成ファイルとApplication Blockごとに構成ファイルが必要であった。このため例えば6種類のApplication Blockを利用する場合、実際の運用時において「アプリケーション構成ファイル」+6種類の「Application Block用構成ファイル」を保守する必要があった。

 しかしConfig Helperの導入により、EntLib 2.0では最小で1つのファイル(アプリケーション構成ファイル)のみを保守するだけでよくなったのである。

 以下は、EntLib 2.0におけるApplication Block用構成ファイルの設定画面である。

Enterprise Library 2.0におけるApplication Block用構成ファイルの設定
「Application Configuration」ノードに「Configuration Sources」ノードを追加し、さらにそこに「File Configuration Source」を追加している。

●ObjectBuilder

 ObjectBuilderはEntLib 2.0から新しくCoreに組み込まれたサブシステムで、オブジェクト・インスタンスの生成や破棄を行う。詳細については後述する。

従来のEntLib 1.xとEntLib 2.0の相違点

 ここからは従来版のEntLib 1.xとEntLib 2.0の相違点について、Application Block別に見ていくことにしよう。なお、従来版のEntLibにはEntLib 1.0(January 2005)とEntLib 1.1(June 2005)が存在するが、ここではEntLib 1.1を基にして比較を行う。

●Logging Application Block

 従来のLogging & Instrumentation Application Blockによって提供されていたInstrumentation機能がCoreへ移行されたため、名称がLogging Application Block(以下LoggingAB)へ変更された。主な変更点は以下のとおりである。

  • パフォーマンスの向上

 先にも述べたとおり、従来のLoggingABはInstrumentation機能も同時に提供していたため、特に初回起動時のパフォーマンスに問題があったのだが、EntLib 2.0版ではInstrumentation機能がCoreへ移行された結果、初回起動時のパフォーマンスが大幅に向上している。以下が従来版とEntLib 2.0版のLoggingABのパフォーマンス比較である。

EntLib 1.0 EntLib 1.1 EntLib 2.0
起動時間 5204ms 3031ms 371ms
1万回ログ出力時の時間 17391ms 10375ms 9323ms
従来版とEntLib 2.0版のパフォーマンス比較
単位は、ミリ秒(ms=1000分の1秒)。EntLib 2.0では起動時間が大幅に短縮されているのが分かる。検証に使ったPCのスペックは、CPUがCeleron 2.2GHz、メモリが768Mbytesである。

 この表からも分かるとおり起動時間については、EntLib 1.1版のLoggingABと比べても、実に8倍以上も高速化している。log4netの起動時間が約156ms(「LoggingABとlog4netのパフォーマンス比較」を参照)であることを考えると、LoggingABの導入においてパフォーマンスが問題になることは、ほぼなくなったといえるだろう。

  • System.Diagnostics名前空間配下のクラスを利用

 LoggingABはSystem. Diagnostics名前空間以下のTraceListenerクラスとCorrelationManagerクラスをベースに再構成された。その結果BinaryFormatter(バイナリ形式のフォーマッタ)の利用、SourceLevelsやPriorityなどによるフィルタ機能などが新しく利用可能になっている。

●Cryptography Application Block

 機能面で特に変更はないが、従来版のHash Providerが8種類だったのに対して、EntLib 2.0版では新たに6種類のプロバイダ(具体的にはHMACMD5、HMACRIPEMD160、HMACSHA256、HMACSHA384、HMACSHA512、RIPEMD160Managed)が追加され、14種類に増えている。

●Data Access Application Block

 ADO.NET 2.0対応になったことでいくつかのメソッドがADO.NET 2.0の汎用基本クラスを使うように変更されている。例えばDatabaseクラス(Microsoft.Practices.EnterpriseLibrary.Data名前空間)が持つGetSqlStringCommandメソッドは、従来版では<EntLib独自>のDBCommandWrapperクラスのオブジェクトを戻り値にしていたのが、EntLib 2.0版では<ADO.NET 2.0>のDbCommandクラス(System.Data.Common名前空間)のオブジェクトを返すように変更されている。

 以下は従来版のサンプル・プログラム(Data Access Application Blockを使用した場合のサンプル・プログラムを参照)をEntLib 2.0版で置き換えたものである。

using System.Data.Common;

public class CustomersTableDataGateway
{
  public DataSet GetCustomers()
  {
    Database database = DatabaseFactory.CreateDatabase();
    string query = "SELECT * FROM Customers";
    DbCommand dbCommand =
      database.GetSqlStringCommandWrapper(query);
    return database.ExecuteDataSet(dbCommand);
  }
}
EntLib 2.0版のData Access Application Blockを使用した場合のサンプル・プログラム
GetSqlStringCommandメソッドは、従来版ではDBCommandWrapper型のオブジェクトを戻り値にしていたが、EntLib 2.0版ではSystem.Data.Common.DbCommand型のオブジェクトを返すようになった。

●Security Application Block

 EntLib 2.0版ではAuthentication(認証)機能やProfile機能が削除されている。従来版のSecurity Application Blockを使ってこれらの機能を使用している場合は、.NET Framework 2.0のSystem.Web.Security名前空間のMembershipクラスやSystem.Web.Profile名前空間のProfileBaseクラスを利用することでほぼ同様の機能を実装できる。ちなみにEntLib 2.0版は内部でAuthorization Manager(以下AzMan)を利用しているため、事前にAzManがインストールされている必要がある。

 AzManは、Windows 2000 Server SP4またはWindows Server 2003ではデフォルトでインストールされているが、そのほかのOSではインストールされていない。Windows XPの場合は、Windows Server 2003 Administration Tools Packからインストールすることができる。なお、Security Application Blockについては「Enterprise Library概説」の次回連載で詳細を取り上げる予定である。

●Caching Application Block & Exception Handling Application Block

 Caching Application BlockとException Handling Application Blockについては機能面で特に変更はない。

 ここまでで従来版とEntLib 2.0版のApplication Blockの相違点について個別に解説してきたわけだが、結局のところ.NET Framework 2.0対応になったことと、多少の機能の増減がある程度で一体これのどこが進化なのかと思われた読者の方もおられると思う。しかし次に紹介するObjectBuilderの解説を読んでいただければ、EntLib 2.0が成し遂げた進化を垣間見ることができるだろう。


 INDEX
  [特集]Enterprise Library 2.0新機能
  Enterprise Library 2.0を特徴づけるDI機能とは
    1.EntLib 2.0の構成
  2.従来のEntLib 1.xとEntLib 2.0の相違点
    3.属性ベースのDI機能を提供するObjectBuilder
 
インデックス・ページヘ  「Enterprise Library 2.0新機能」


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 記事ランキング

本日 月間