2011-02-09 8 views
0

私はRDBMSについて学んだので、私はリレーショナルモデルで考え始め、オブジェクト指向では考え始めました。今では、Javaデータ構造にデータを格納したり、クエリを実行しようとするのに問題があります。リレーショナルをオブジェクト指向に変換する最良の方法は何ですか?

お互いに関連するエンティティセットを持つアプリケーションを作成したいので、それぞれのエンティティを独自のクラスにしました。各エンティティの属性はインスタンス変数です。さて、私たちはこれまで良かったと思う。 TitleおよびGameはすべてエンティティです。 Game ISA TitleだからはTitleから継承する必要があります(ゲームは物理コピーとみなし、タイトルはゲームの名前とみなします)。Titleは親クラスで、

私はメインクラスにゲームセットを持っており、特定のゲームを見つけたいと思えば繰り返しができます。特定のタイトルはどのようにして見つけられますか?私はタイトルが継承されているのでタイトルセットがないので、ゲームを繰り返して、タイトルの名前を見つけたらそれをセットに追加して、ユニークなタイトルだけを取り戻すことができます。

ゲームは変更可能です(isBoughtは変更可能)ので、悪い考えを設定していますか? Javaでエンティティセットを作成する最良の方法は何ですか? idのオブジェクトへのマッピングにセットの代わりにMapを使う?

答えて

4

オブジェクト・リレーショナル・ギャップの修正は簡単な作業ではありません。これを行うORM(オブジェクト・リレーショナル・マッピング)フレームワークがあります。しかし、彼らはいくつかの学習曲線を持っています。 HibernateEclipseLinkは、Java - JPA(java persistance API)のORM標準の2つの実装です。

+0

他の関連する質問でも見ましたが、ソフトウェアで何かを変換するつもりはありませんでした。私はただ私の心を変える必要がある。私は間違った方法を考えていて、誰かがどのように問題に近づくかを見たいと思っていました。 – styfle

+0

@styfle ORMの概念は、2つ(RDBMS、OOP)のマッピングに役立ちます。 – Bozho

+1

@styfle、あなたの頭の中で一緒に働く2つのアイデアを持つ問題は、 "インピーダンスのミスマッチ"という用語を持つ他の人には十分なトラブルでした.ORMツールはこれを扱い、javaのデータベースを非常に自然な方法で扱うことができます。 – Quaternion

0

リレーショナルモデルとOOモデルの間に基本的なギャップはありません。リレーショナル・データ・モデルは、リレーション・タイプおよび関係演算子(および他のタイプも同様)をサポートするタイプ・システムです。 OOデータモデルは、継承をサポートする型システムです。

これらのパラダイムを考えるときに人々がしばしば行う間違いは、OO用語の型(クラス)をリレーショナルモデルのリレーションまたはタプルと同じにすることです。 DateとDarwenはこれをFirst Great Blunderと呼んでいます。現実はそれよりずっと簡単です。型は、リレーショナル・モデルとOOモデルの両方で型です。 2つのパラダイムは直交してお互いに相補的であり、互いに排他的ではありません。

OO/RMのミスマッチが本当に意味することは、プログラマがソフトウェアツールが容易にサポートできない特定のパターンの変換を実装したいということです。関係モデルは責任を負いません。ソフトウェアメーカーはそうです。

関連する問題