技術解説PetShopで学ぶデータベース・アクセスの実装パターンデジタルアドバンテージ2004/03/27 |
|
|
データ層における実装
残るはデータ・アクセス・コンポーネントのみである。まず、先ほどビジネス・ロジックの実装時に使用されていたCreateメソッドを含むファクトリ・クラスの実装は次のようになっている。
|
|
DALFactory / Products.csのCreateメソッド | |
このクラスで定義されているメソッドは、このCreateメソッドだけである。このメソッドは、Web.Configファイルの設定に従って、実際にデータベースにアクセスするクラスのインスタンスを返す。 |
ここで、「WebDAL」というキーワードに対する値は、Web.Configファイルで次のように記述されている(DBMSとしてSQL Serverを利用する場合)。
|
|
Web / Web.Configで記述されている使用DBMSの設定 |
「PetShop.SQLServerDAL」というのは、後に示すSQLServerディレクトリにあるProducts.csファイルで定義されているProductクラスが含まれるアセンブリの名前である。
Createメソッドのコードでは、まずそのアセンブリをAssembly.Loadメソッドによりロードし、さらにPetShop.SQLServerDAL.ProductクラスのインスタンスをCreateInstanceメソッドにより作成する。この手順は、クラス名から動的にそのクラスのインスタンスを生成する標準的な方法である。
このような実装になっているため、SQL Serverの代わりにOracleを利用する場合には、Web.ConfigファイルでWebDALに対する値を「PetShop.OracleDAL」に書き換えるだけでよい(もちろんOracle用のアセンブリが準備されていなければならない)。
続いてCreateメソッドの戻り値の型になっているIProductインターフェイスの定義を示す。
|
|
IDAL / IProduct.csで定義されているインターフェイス |
このファイルだけでは少々分かりにくいので、オーダー情報のテーブルにアクセスするクラス用のインターフェイスも示しておこう。
|
|
IDAL / IOrder.csで定義されているインターフェイス |
実際にデータベースにアクセスする各DBMS用のクラスのセットは、これらのインターフェイスで宣言されているメソッドさえ定義しておけば、プラグインのように差し替えて使えるというわけである。
上記のIProductインターフェイスを実装したSQL Server用の商品情報取得クラスであるProductクラスは次のようになっている。ここでは、詳細については触れないが、PetShopではすべて「接続型」のデータベース・アクセスで記述されている(データセットは一切使われていない)。.NETにおけるデータベース・アクセスの詳細は「連載:ADO.NET基礎講座」で解説されている。なお、PetShop 3.0ではストアド・プロシージャも一切使用されていない(「Middleware Benchmark」の目的では、ストアド・プロシージャを使ってはいけないらしい)。
|
|
SQLServer / Products.csのGetProductsByCategoryメソッド | |
このメソッドでは、SQL Serverにselect文を発行して、レコードを読み込み、ProductInfoオブジェクトのリストとしてビジネス層に返す。 |
このGetProductsByCategoryメソッドでは、SqlDataReaderクラスで読み取ったレコードをProductInfoオブジェクトに詰め替え、それをArrayListオブジェクトに格納して返しているのが分かる。
データベースに対して実際にSQL文を実行するメソッドは、SQLHelperクラスの静的メソッドにまとめられている。このクラスは、実は「Data Access Application Block for .NET」としてMSDNで公開されているSQLHelper.csの一部を切り出して流用したものだ。
Data Access Application Block for .NETのSQLHelper.csは、ADO.NETを利用してSQL Serverを扱うプログラミングを行う際にいつも記述しなくてはならないような一連のコードをユーティリティ・クラス(ヘルパー・クラス)としてまとめたものである。
上記のGetProductsByCategoryメソッドで使用されているSQLHelper.ExecuteReaderメソッドのコードも次に示しておく。
|
|
SQLServer / SQLHelper.csの一部 | |
このファイルのフルセットは「Data Access Application Block for .NET」として公開されている。 |
SQLHelper.csのコードは、アプリケーションによらずどんなアプリケーションにでも単独で使える便利なメソッド集である。
■
以上の解説で、PetShopで用いられているデータベース・アクセスの実装のパターンを把握していただけただろうか。PetShopにはここで解説したこと以外の機能も多く実装されている。それでいて、本格的なサンプル・アプリケーションとしてはそれほどコード量は多くないので、ぜひ実際にダウンロードしてソース・コードを追いかけてみてほしい。
INDEX | ||
[技術解説] PetShopで学ぶデータベース・アクセスの実装パターン | ||
1.PetShopアプリケーションの概要 | ||
2.PetShopの論理アーキテクチャとファイル構造 | ||
3.データベースからUIまでのデータの流れ(1) | ||
4.データベースからUIまでのデータの流れ(2) | ||
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|