1

次のクラスが与えられた場合:

class People {
.....
String getName();

int getAge();
...
}

年齢が 20 歳以上のすべての人についてデータベースにクエリを実行したいので、getPeople(AGE>20). のようなものを書きたいと思います。要するに、読みやすいオブジェクト指向のクエリを書きたいと思います。クエリには複雑な選択基準を設定できますが、簡単にするために単一の変数に制限します。私の設定では、オブジェクト指向クエリをリレーショナル クエリに変換することで、SQL からこの詳細を取得します。これを設計する必要がありますが、きれいなものを考えることができませんでした。忍耐力のある方は、続きをお読みください。

古い質問 (おそらくうまく構成されていませんでした)

私は SQL データベースを使用して Java で作業しています。私たちの場合、データベースクエリは通常非常に単純です。目的は、オブジェクト指向言語でクエリを記述し、それらを汎用モジュールによって SQL クエリに変換できるようにすることです。

オブジェクトの挿入、削除は、public void delete(DBObject obj) のように簡単に設計できます。ただし、問題はクエリにあり、設計にはあなたの助けが必要です。アカウント オブジェクトがあり、アカウント オブジェクトをデータベースに挿入したいとします。この場合は、public void insert(Account account); を呼び出します。特定のアカウント タイプに基づいて、またはアカウント名が文字列 str で始まらないすべてのアカウント オブジェクトを取得したい場合はどうすればよいでしょうか。理想的には、アカウント クラスで公開されている (値を返す) すべての動作を照会できる必要があります。

クエリ ビルダーの必要性はわかりますが、簡単に使用できるきちんとしたコントラクトを思いつくことができませんでした。

PS - 理解を深めるためだけにこれを試みています。したがって、休止状態または任意の orm への参照は、おそらく私の答えではありません。私はgitでいくつかのソースコードを掘り下げようとしましたが、通常は大きすぎます:(

編集: マットは彼のコメントで仕様設計パターンを提案しました。これにより、物事がある程度単純化されます。私が直面している問題の 1 つは、読みやすい簡単な方法でクエリを作成することです。C1 C2 C3 C4 をいくつかの条件とすると、このパターンで可能になるのは、ユニバーサル ゲートを使用して複雑なクエリを簡単に記述できることです。ここでの問題は、C1 などのこの個々の状態をモデル化することです。関数 public int yearsSinceAccountWasOpend() を持つアカウント クラスがある場合、少なくとも 7 歳のアカウントを取得したいのですが、どうすればよいですか? (注釈のトリック?)

4

0 に答える 0