特集ASP.NETで実践するO/Rマッピング(NHibernate編)山田 祥寛(http://www.wings.msn.to/)2005/09/21 |
|
いまさら強調するまでもなく、今日、データベースといえば、リレーショナル・データベース(以降、RDB)が主流であることは間違いない。しかし、C#やJava、C++といったオブジェクト指向言語の台頭によって、RDBが常に最適解とはいえない状況が発生しつつある。というのも、RDBとオブジェクト指向言語で扱うオブジェクトとは、そもそもの構造が異なるためだ。
オブジェクト指向に基づいてデータベース・アクセスを行おうとすれば、例えばINSERT命令を発行するには、データベースに格納すべき値をオブジェクトから取り出し、INSERT命令を動的に組み立てる必要がある(1つのオブジェクトをテーブル内の1レコードに対応させる場合)。逆に、SELECT命令でデータベースから取り出した結果セットは、オブジェクトを生成してから、結果セット内の各値を対応するオブジェクトのプロパティに代入しなければならない。
このような相互マッピングのためのコードは、実に企業アプリケーション全体の3〜7割まで占めるともいわれ、開発生産性を低下させる一因ともなっているというわけだ。このような問題のことを「インピーダンス・ミスマッチ」という。
従来のデータベース・アクセスの問題点 |
オブジェクトのデータをデータベースに格納したり、データベースから取得したデータをオブジェクトとして利用したりするにはマッピングのためのコードが必要となる。 |
O/Rマッピングとは?
このようなオブジェクトとRDBとのマッピングのためのコーディング負荷を軽減するための手法として注目されているのが、本稿のテーマである「O/Rマッピング(Object/Relational Mapping)」だ。
O/Rマッピングとは、その名の通り、オブジェクトとRDB(のテーブル)とをマッピングすることをいう。具体的には、クラスのプロパティとテーブル上のフィールド(テーブルの列)とをマッピングする。先述したように、オブジェクトとRDBのテーブルとの間には構造上のギャップが存在するが、このギャップを機械的に埋めようというのがO/Rマッピングの考え方だ。
O/Rマッピング・ツールの仕組み |
クラス(オブジェクト)とRDBとのギャップをO/Rマッピング・ツールが埋めてくれる。 |
そして、O/Rマッピング・ツールとは、このフィールドからプロパティへの値の割り当てを自動化するためのツールで、本来開発者が自前で記述しなければならなかった冗長なマッピングのためのコードをアプリケーションから排除することができる。
もっといえば、O/Rマッピング・ツールを介することで、開発者はデータベースとオブジェクトの関連付けを設定ファイルとして用意するだけでよい。これによって、アプリケーションからはオブジェクト中のプロパティにアクセスするだけで、直感的にテーブル上の各フィールドにアクセスすることが可能になるというわけだ。
■.NETの向けのO/Rマッピング・ツール
Javaの世界では、すでにO/Rマッピング・ツールとしてHibernateやTorque、Castor、Cayenneといった定番ツールも提供されており、現場でもごく当たり前に利用され始めている。しかし、片や.NETの世界ではどうだろう。O/Rマッピングというキーワードが紹介される機会も少なく、当然のことながら、定番のO/Rマッピング・ツールと呼ばれるものは不在というのが現状だ。
もっとも、.NETの世界はDOA(Data Oriented Approach:データ中心アプローチ)に最適な環境だという意見もあるかもしれない。OOA(Object Oriented Analysis:オブジェクト指向分析)をやるならJ2EE、そういう意見もあるだろう。
だが、DOAとOOAは必ずしも排他的な概念ではない。例えば、大部分はDOAで賄えるが、部分的に複雑な個所をOOAで設計したい、そんなケースも実際にはあるだろう。そのような場合には、やはり.NETでもO/Rマッピングは有効となるのだ。そして実際、.NETにも実用に値するO/Rマッピング・ツールは用意されている。
以下に、.NET環境で利用可能なO/Rマッピング・ツールをいくつか挙げてみた。
ツール名 | 特徴 |
NHibernate | Java定番のO/Rマッピング・ツールHibernateの.NET移植版。専用のクエリ言語HQL(Hibernate Query Language)やキャッシュ機能などが充実 |
iBatis.NET | SQL命令を外部化する「SQL Maps」とDI(Dependency Injection)機能を提供する「DAO Framework」から構成されるフレームワーク |
Neo | マッピング・ファイルから永続化クラスを自動生成するツールを備える |
Gentle.NET | キャッシング機構や検証機能を備えた高機能なO/Rマッピング・ツール |
Atoms Framework | VB6時代に提供されていたJC Frameworksを.NET Framework向けに拡張したツール |
.NET環境で利用可能なO/Rマッピング・ツール |
結局、次期ADO.NET 2.0では実装が見送られてしまったものの、マイクロソフト標準のO/Rマッピング・ツールとして「ObjectSpace」というキーワードが取りざたされた時期もあった。次々期のADO.NETでは実装されることを期待したい。
本特集では、これらO/Rマッピング・ツールの中でも特徴的な機能を提供する「NHibernate」と「iBATIS.NET」を取り上げてみることにしよう。「.NETでO/Rマッピング?」と違和感を持たれた方も、まずは具体的な実装および動作の流れを見ていただきたい。
なお、本稿ではASP.NETをベースにO/Rマッピング・ツールの使い方を紹介しているが、もちろん、これらO/Rマッピング・ツールの用途はASP.NETに限定されるものではない。Windowsアプリケーションをはじめ、.NET Frameworkベースのすべてのアプリケーションで利用することが可能だ。
INDEX | ||
[特集] ASP.NETで実践するO/Rマッピング(NHibernate編) | ||
1..NETの向けのO/Rマッピング・ツール | ||
2.NHibernateのインストールと設定手順 | ||
3.NHibernate経由でデータベースを検索する | ||
4.NHibernateによるデータ登録 | ||
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|