[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