O/Rマッピングで失敗しない分析・設計のポイント:JavaのDBアクセスを極める(2)(3/3 ページ)
Webシステムが主流となり、データベース・アプリケーションはJavaやC#といったオブジェクト指向言語で開発することが多くなった。しかし、データベース設計はオブジェクト指向モデルとうまくかみ合わず、データモデル設計に苦労するエンジニアは少なくない。本連載は、オブジェクト指向モデルとデータベースモデルのインピーダンスミスマッチに対応するテクニックを紹介する。(編集局)
問題(2)における解決へのアプローチ
次に問題(2)「インピーダンスミスマッチのあるデータモデルのマッピング」の解決へのアプローチとして、業務データモデルとデータベース・データモデルとを的確にマッピングする方法を説明していきます。
1. O/Rマッピングによる異なるデータモデルのマッピング
第1回で解説したように、方法論によるアプローチのすれ違いから、データモデルにインピーダンスミスマッチが発生することはご承知のとおりです。インピーダンスミスマッチを埋める振る舞いをO/Rマッピングと呼びます。なお、O/Rマッピングは、問題(1)の解決へのアプローチの中で説明した、カプセル化されているデータベース・レイヤ内に実装することが重要なポイントです。
それでは、具体的にO/Rマッピング処理が一連の処理シーケンスの中のどこで実行されるのかを理解するために、図6を参照してください。
図6は、SELECT問い合わせを実行している例です。処理シーケンスごとの補足説明を以下に示します(図6の数字は、下記表3の説明の数字を示します)。
(1) | 業務クラス1は、必要なデータとなるエンティティ・オブジェクト1を生成する |
---|---|
(2) | 検索条件オブジェクトを生成し、SELECT問い合わせをする際の条件を設定する |
(3) | SELECT問い合わせ処理を行うために、DAO1のインスタンスを生成し、該当メソッドに(1)で生成したオブジェクトを渡す |
(4) | DAO1はO/Rマッピングを行うMapperオブジェクトを生成し、該当メソッドに検索条件オブジェクトとマッピング対象となるエンティティ・オブジェクトを渡す |
(5) | Mapperは検索条件オブジェクトの条件内容を基にSQLを生成し、RDBに問い合わせする(O/Rマッピング処理に該当) |
(6) | RDBからの問い合わせ結果をエンティティ・オブジェクトの各属性にマッピングしセットする(O/Rマッピング処理に該当) |
表3 図6の処理シーケンス補足説明 |
O/Rマッピングには(5)および(6)の処理が該当します。つまり、(5)および(6)の処理内でデータモデル間のギャップを吸収していることになります。
ここまでで、インピーダンスミスマッチを埋めるO/Rマッピング処理の内容を理解できたと思います。O/Rマッピング処理を行うクラスをスクラッチで作成することはもちろん可能ですが、最近では以下のようなフレームワークが登場していますので紹介しましょう。
2. O/Rマッピング・フレームワーク
O/Rマッピング・フレームワークとは、リレーションデータモデルと業務データモデルとの複雑なマッピング処理を効率的かつ簡易に実現するフレームワークです。スクラッチでO/Rマッピング処理を実装することは1つの方法ですが、フレームワークを用いることにより、実装コード削減による開発期間の短縮や変更が発生した場合の高いメンテナビリティーを実現してくれます。
具体的には、以下のような工数および品質的な問題に威力を発揮すると期待できます。
- O/Rマッピングのコードはシステム全体で考えても大きな割合を占めるため、相当な開発工数が必要となり、加えて多くのテスト工数も必要となる
- 単純なコーティング(代入)の繰り返しでバグが混入しやすく、また発見しにくい
- データベース・レイヤの品質が悪いと、上位レイヤであるビジネスロジック・レイヤなどを含め影響範囲が大きくなってしまう
それでは、O/Rマッピング・フレームワークに備わっている基本的な機能を以下に挙げてみます。
O/Rマッピング・フレームワーク基本機能
- インピーダンスミスマッチがある業務データモデルとデータベース・データモデル間のマッピング自動化機能
- データベース・アクセスのための手続き処理のスケルトン生成機能
- RDBごとにあるSQL方言の吸収機能
- さまざまなデータベース・アクセスAPIの提供
3. 各種O/Rマッピング・フレームワークの紹介
O/Rマッピング・フレームワークには、本記事執筆時点でさまざまな製品が存在しています。本来ならばそれらの詳細な機能を解説するところですが、@ITでO/Rマッピング・フレームワークの内容を取り上げている記事もあるため、本記事ではどういったO/Rマッピング・フレームワークが存在するのかを紹介するにとどめます(表4)。
製品名 | ライセンス | Webサイト | @ITの記事 |
---|---|---|---|
Hibernate | 無償 | http://www.hibernate.org/ | Hibernate記事 |
Cayenne | 無償 | http://objectstyle.org/cayenne/index.html | Cayenne記事 |
CocoBase | 有償 | http://www.jsys-products.com/product/ | |
iBATIS | 無償 | http://www.ibatis.com/support.html | |
O/R Broker | 無償 | http://orbroker.sourceforge.net/ | |
Torque | 無償 | http://db.apache.org/torque/ | |
Castor-JDO | 無償 | http://www.exolab.org/ | Castor記事 |
PriDE | 無償 | http://pride.sourceforge.net/ | |
JDO | 無償 | http://access1.sun.com/jdo/ | |
Voruta | 無償 | http://voruta.sourceforge.net/ | |
表4 O/Rマッピング・フレームワーク一覧 |
Point
- インピーダンスミスマッチがある場合、異種データモデル間のマッピングはO/Rマッピング処理を実装することにより実現できる。
- O/Rマッピング処理は、ビジネスロジックからは見えないようにカプセル化されたデータベース・アクセスを担うレイヤに実装することが重要である。
- 実装コード削減による開発期間の短縮、変更が発生した場合の高いメンテナビリティー、品質の安定化を実現してくれるO/Rマッピング・フレームワークを使うことは有用な手段である。
今回のまとめ
今回は、開発現場で発生するO/Rマッピングに関連した代表的な2つの問題を解決するための方法を説明してきました。次回(第3回)は、「永続化処理分析・設計におけるOOA/DOAを使用した最適な分析/設計パターン」をテーマとして具体的に解説します。(次回に続く)
筆者紹介
アクセンチュアから生まれた、企業改革のためのシステム開発を手掛けるエンジニア集団。安間裕が代表取締役社長を務める。諏訪勇紀はJavaに精通しSI上流での分析/設計を得意とするシニア・システム・アナリスト。
Copyright © ITmedia, Inc. All Rights Reserved.