[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] RDBとオブジェクト指向のギャップについて
「白やぎさん」 \\ (°)(°)| http://www.inac.co.jp/shiroyagi/
==========================================================(株)アイナック====
小薮です。
特にJavaに関する質問というわけではないですが、
皆様のご意見お聞かせください。
【想定】
A,Bという2つのエンティティクラスがあり、それぞれRDBで
永続化します。DB上には2つのテーブルがあり、それぞれ
A,Bに対応していて、1レコード=1インスタンスです。
Aのインスタンスのメソッドaは、Bのインスタンスのメソッドbを
呼び出します。Aはbのインスタンスを特定できるようなDB上のキーを
持っています。
class A {
String keyOfB = 初期値;
// その他属性
public void someMethod() {
B aB = new B(keyOfB);
aB.b();
}
A(String keyOfA) {
//コンストラクタ
//DBから項目を読み出してオブジェクトを初期化
}
}
class B {
public void b() {
//処理
}
B(String keyOfB) {
//コンストラクタ
//DBから項目を読み出してオブジェクトを初期化
}
}
ここで、
A aA = new A(keyOfA);
aA.someMethod();
のような処理をすると、RDBに対してAの初期化とBの初期化、
あわせて2回のアクセスを行うことになります。
【問題点】
このような処理は、従来ですとテーブルのJOINを行って、
一度のアクセスでデータを取得するのが普通だと思います。
それに比べて上記の方法は、性能が落ちるはずです。
A,Bだけならいいのですが、C,D,E・・・とたくさんあったり、
またA,B,C・・の組が何組もあったり、といった場合には
性能劣化が無視できない可能性があります。
どうにかしてJOINで一度にとってこようと思うと、
何かしらオブジェクト指向的でないコードを書かざるを
得ないように思います。
【目標】
性能が優先される場合、なんらかの形で柔軟性や可読性を犠牲に
せざるを得ないようにも思いますが、それでも被害は最小限に
止めたいものです。
【質問】
皆様はこういう時どうしてらっしゃいますか?
定番の手法があるものでしょうか?
-----------------------------------
koyabu@xxxxxxxxxx