連載
Enterprise Library概説

洗練されたデータアクセス機能を実装しよう

市川 龍太(patterns & practices Champion
2005/07/16
Page1 Page2 Page3 Page4

Data Access Application Blockをさらに使いやすくするツールたち

 ここではEnterprise Library 1.0のリリース以後に公開されたDAAB用の拡張機能やツールをいくつか紹介する。

●CRUDメソッドを自動生成するツール「Data Tier Generator」

 ここまでの説明で、DAABを使うことにより、データアクセス・ロジック・コンポーネントの開発が楽になることはお分かりいただけたと思うが、DAABはあくまで汎用のデータアクセス・ロジック機能を提供するにすぎない。そのためビジネス・ロジックへ公開するCRUDメソッドについては、依然としてゼロからコードを記述するしかなく、これはかなりの手間である。

 ここで紹介する「Data Tier Generator」は、DAABを使って任意のデータベースの各テーブルに対応するTableDataGatewayクラス(CRUDメソッドを含むクラス)とSQLスクリプト・ファイル(自動生成されたTableDataGatewayクラスのCRUDメソッドが利用するストアドプロシージャを生成するファイル)を自動生成してくれるツールである(ちなみに、単一のテーブルまたはビューに対するCRUD操作を一元的に提供する、データ層におけるパターンはマーチン・ファウラー氏による書籍「エンタープライズアプリケーションアーキテクチャパターン」では「TableDataGatewayパターン」と呼ばれる)。

 Data Tier Generatorは、以下のページから入手可能である。

 次の画面は、Data Tier Generatorを実際に実行しているところである。

「Data Tier Generator」の実行画面
Data Tier Generatorを実際に実行しているところ。上記のサイトからダウンロードしたZipファイルを解凍すると得られる「DataTierGenerator.exe」を実行している。
  接続先サーバ名(Server)。
  接続先データベース名(Database)。
  認証モード。Windows認証(Windows Authentication)か、SQL Server認証(SQL Server Authentication)かを選択できる。SQL Server認証の場合は、ログイン名(Login Name)とパスワード(Password)も入力する必要がある。この例ではWindows認証を選択している。
  で指定したデータベースへのアクセス許可を付与するユーザ名(Grant User)。
  ストアドプロシージャのプレフィックス(=接頭辞)名(Prefix)。
  ストアドプロシージャごとにSQLスクリプト・ファイルを作成するか(Create multiple files for stored procedure。チェックがオンの場合)、1つのファイルにまとめるかの指定(オフの場合)。
  自動生成されるクラスの名前空間(Namespace)。

 上の画面の設定で[Generate]ボタンを押すと、複数のソース・ファイルとSQLスクリプト・ファイルが生成される(ただしEntLibQuickStartsデータベースは、デフォルトではWindows照合順序の設定が「SQL_Latin1_General_CP1_CI_AS」になっているため、生成時にエラーになってしまう。これを解決するには、「Alter database EntLibQuickStarts collate Japanese_CI_AS」というSQL文をEntLibQuickStartsデータベースに対して発行するなどして、Windows照合順序を「Japanese_CI_AS」に変更してやるとよいだろう)。

 生成されたすべてのファイル(4つのソース・ファイルと12個のSQLスクリプト・ファイル)は、以下のリンクからダウンロードできる。

 このツールを使用することで、DAABを使ったデータアクセス・ロジック・コンポーネントの実装が随分と楽になるだろう。

●実行時に動的に接続情報を作成するツール「Dynamic Database Factory」

 いままで紹介してきたDAABの使用方法では、データソースへの接続情報をConfigurationコンソールで設定していたのだが、場合によっては実行時に接続先サーバや接続先データベースを指定したいこともあるかもしれない。

 「Dynamic Database Factory」は、ソース・コードで接続情報を指定できるようにDAABを拡張するクラスである。

 以下にDynamic Database Factoryのサンプル・コードを示す。

Database db = DynamicDatabaseFactory.CreateDatabase(
  "(local)", "EntLibQuickStarts", DBProviderType.SqlServer);

DBCommandWrapper dbCommandWrapper =
  db.GetStoredProcCommandWrapper("GetProductName");

string productName =
  (string)db.ExecuteScalar(dbCommandWrapper);
Dynamic Database Factoryのサンプル・コード
DynamicDatabaseFactoryクラス(EnterpriseLibrary.Extensions.Data名前空間)のCreateDatabaseメソッドのパラメータにより、データベース・サーバ名、データベース名、データ・プロバイダの種類を指定できる(この例では、それぞれ順に「(local)」「EntLibQuickStarts」「DBProviderType.SqlServer」)。これにより、実行時に動的にデータソースへの接続情報を設定することができる。

 Dynamic Database Factoryは、以下のリンクからダウンロードできる(ダウンロード用のページがないため、ファイルに直接リンクしている)。

●OleDb用のデータ・プロバイダ「OleDb Data Provider for Enterprise Library 1.0」

 OleDb Data Provider for Enterprise Library 1.0は、OleDb用のデータ・プロバイダとして、OleDbDatabaseクラス、OleDbCommandWrapperクラスを提供する。

 これは以下のリンクからダウンロードできる。

●そのほかの拡張機能とツールについて

 ここで紹介した3つのツール以外にもさまざまなツールや拡張機能が以下のサイトで公開されている。

 以下に、本稿執筆時点で公開されている、そのほかのDAAB用ツールや拡張機能を紹介する。

  • Enterprise Library Data Access Block: Storing and Retrieving BLOB Data in Oracle(OracleでBLOBデータ(=バイナリ・ラージ・オブジェクト・データ:非常に大きなサイズのバイナリ・データのこと)を簡単に扱えるようにOracleデータ・プロバイダを拡張するためのサンプル・コード)

  • MySql for Enterprise Library(MySQL用データ・プロバイダ)

  • Sybase ASE Data Providere(Sybase用データ・プロバイダ)

  • Enterprise Library - Data - Firebird Database Provider Classes(Firebird用データ・プロバイダ)

【コラム】Enterprise Library 1.1について

 2005年7月1日にEnterprise Library 1.1(Enterprise Library - June 2005)がリリースされた。

 Enterprise Library 1.0からの変更個所については、上記の「About the June 2005 Release」で確認することができるが、主なものについて以下に示しておく。

  • Configuration Application Blockのメモリ・リーク問題などのバグ修正

  • 構成設定読み込み時のパフォーマンス改善

  • Application Block固有の構成設定を、アプリケーション構成ファイル(App.configまたはWeb.config)、レジストリ、SQL Serverへ読み書きできるように対応

  • Logging and Instrumentation Application Blockに新しく「Flat File Sink」(=任意のしきい値を設定することで、ログ・ファイルを自動的に保存する拡張機能)を追加

  • DAABのDatabaseクラスに新しくGetStoredProcCommandWrapperWithSourceColumnsメソッド(ストアドプロシージャ名とそのパラメータ名をメソッドのパラメータとして渡すことで、DBCommandWrapperオブジェクトを自動生成してくれる)が追加

 以上、今回はDAABの概要説明と導入手順、そしてそれらを拡張する機能やツールについて紹介した。DAABについてさらに知りたい場合は、冒頭の「Tech・Ed 2005セッション」の告知でも紹介した「Enterprise Library 1.0 Hands On Labs」を参考にするとよいだろう。

 次回はLogging and Instrumentation Application BlockとException Handling Application Blockについて解説する予定である。End of Article


 INDEX
  連載:Enterprise Library概説
  洗練されたデータアクセス機能を実装しよう
    1.Data Access Application Blockとは何か?
    2.ConfigurationコンソールでData Access Application Blockの構成を設定する
    3.Data Access Application Blockを使うメリット
  4.Data Access Application Blockをさらに使いやすくするツールたち
 
インデックス・ページヘ  「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 記事ランキング

本日 月間