SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Visual Studio .NETのウィザードを使ってN階層アプリケーションを作成する:パート3

Visual Studio 2005でビジネスロジック層を効率扱う方法

データベースプロバイダの非依存性

 Microsoftは、プロバイダパターンを利用してさまざまなバックエンドエンジン間を切り替える機能をテーブルアダプタロジックに追加していません。プロバイダパターンは、抽象ファクトリパターンを中心とする組み合わせであり、アプリケーションを再コンパイルせずにバックエンドを切り替える機能を効率的に実現します。このパターンは、DotNetNuke、ASP.NET、およびその他のいくつかのMicrosoftテクノロジで使用できますが、生成されたテーブルアダプタには対応していません。しかし私は、データベースに依存しないアプリケーションを開発するという目的を達成するために、これを実現するストラテジを追求し続けてきました。

 まず最初は、接続文字列を別のソースに変更して、データセットの再生成を試みました。データセットジェネレータは古いADO接続型を使おうとするので、これはうまくいきませんでした。しかし、別のデータベースへの接続を作成し、データセットジェネレータの内部で、各テーブルがポイントする接続を変更すれば、テーブルを再生成できます。

 引き続きNorthwindsの例を使って説明を続けます。このサンプルデータベースは、MS Access、FoxPro、およびSQL Serverで提供されています。この手順を紹介するために、本稿のサンプルアプリケーションを、AccessデータベースとSQL Serverデータベースで動作するように変換します。最初からSQL Server接続にOLEDBプロバイダを使用していれば、それほど複雑な話ではないのですが、このデモンストレーションでは、Accessデータベースに対してはOLEDBプロバイダを使用し、SQL Serverに対しては引き続きSQLClientプロバイダを使用します。

 本稿のサンプルアプリケーションは、現在、SQL Server接続で動作するように構成されています。これをAccess接続に変更する前に、元の状態を簡単に復元できるように、現在の構成を保存しておきましょう。データセットを開き、デザイナコードファイルを開きます(データセットの下のサブファイルを表示するには、ソリューションエクスプローラの上部にある[Show All Files]をオンにする必要がある場合があります)。デザイナファイルには、Partial Public Class OrdersDataSetおよびNamespace OrdersDataSetTableAdaptersという2つの主要なセクションがあります。クラスを修飾する属性が数行にわたって指定されていますが、余白内のマイナス記号をクリックしてセクションを折りたたむと、2つのセクションが表示されます。

図9 データセットデザイナのコードファイル
図9 データセットデザイナのコードファイル

 テーブルアダプタのセクションを強調表示して[Ctrl]+[C]キーを押すと、セクション全体がコピーされます。プロジェクト内に新しいClassモジュールを作成し、「OrdersDataSetTableAdapters.SQL」という名前を指定し、コピーしたコードを貼り付けます。もちろん、重複するためこのままではエラーになりますが、末尾に「.SQL」を付けて名前空間を変更すれば、問題なくコンパイルできます。

 次に、データセットデザイナのOrdersデータセットに戻り、「Orders」テーブルを右クリックし、[Configure...]を選択します。ウィザードの3ページ目が表示されますが、[Previous]ボタンを2回クリックして、接続を定義する先頭ページに戻ります。Accessデータベースの接続を選択するか、[New Connection]ボタンをクリックして新しい接続を作成します。ここで追加する接続は、プロジェクト設定と「App.Config」ファイルに記録されます。

 接続文字列を変更したら、操作を続けて、構成ウィザードを終了します。テーブルアダプタがAccessデータベースをポイントするように変更されます。

図10 テーブルアダプタ接続の変更
図10 テーブルアダプタ接続の変更

 データセット内のテーブルごとにこの手順を続けると、アプリケーションが、SQL ServerデータベースではなくAccessデータベースを使用するように変換されます。アプリケーションを実行すると、Accessデータが表示されます。疑うなら、情報の一部を変更して、AccessテーブルとSQL Serverテーブルのどこが変更されたかを確認してみてください。

 次に、デザイナファイルからテーブルアダプタのセクションを取得し、「OrderDataSetTableAdapters.Jet」という名前の新たなClassモジュールを作成し、コードを貼り付けます。今回は、末尾に「.Jet」を付けて名前空間を変更します。

 Developersパーシャルクラスファイルの先頭にあるImports文の名前空間の拡張子を変更するだけで、AccessとSQL Serverを相互に切り替えることができます。「.Jet」を追加すると、テーブルアダプタが、Accessとの接続用のコードをポイントします。

Imports ta = NorthwindDataSetTableAdapters.Jet
Partial Public Class NorthwindDataSet
    Private taOrders As New ta.OrdersTableAdapter
    Private taOrderDetail As New ta.Order_DetailsTableAdapter
...

 これは、正しい方向に向けた大きな一歩ではありますが、拡張子の変更後にプロジェクトをビルドしなければならないため、最終的なソリューションではありません。本当のプロバイダパターンならば、「App.Config」ファイル内のパラメータを変えるだけで変更が可能であり、再コンパイルの必要はありません。私は引き続きこの問題に取り組み、今後の記事の中でソリューションを紹介したいと考えています。よいアイディアがあれば、ぜひお知らせください。

まとめ

 Visual Studio 2005では、データアプリケーションの開発が驚くほど容易になりました。最終的には実際のリリースバージョンを使っていますが、ここでの開発はすべて、ベータ版で行われています。特筆すべき変更の1つは、デザイナコード内の各クラスに追加された新しい属性です。テーブルアダプタの処理に関する問題の1つとして、これらがどの基本クラスからも継承されず、インターフェイスも実装しないため、オブジェクト指向の手法を適用しにくいことが挙げられます。属性が導入されたことで、CodeDomとリフレクションを使って、操作に必要なリンクが提供されるはずです。何が起きているかについては、今後の記事で明らかにしていきます。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

David Catherman(David Catherman)

CMI Solutions所属。データベースアプリケーションのデザイン/開発に20年以上の経験を持ち、ここ4、5年は特にMicrosoft .NETとSQL Serverに仕事が集中している。現在はCMI Solutionsのアプリケーション設計者および上級開発者であり、Visual Studioと...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/348 2006/04/24 16:33

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー