5

これはどの言語にも固有のものではなく、ベスト プラクティスに関するものです。私は JPA/Hibernate を使用しています (ただし、他の ORM ソリューションでもかまいません)。この状況にどのように対処しているかを知りたいです。ドメイン クラス。その特定のクエリを表す特定のクラスを作成しますか? 他の種類のオブジェクト (配列、マップなど) でクエリを返しますか? 他の解決策はありますか? あなたの経験とベストプラクティスについて知りたいです。

PS実際には、特定のクエリに対して特定のオブジェクトを作成しています。

4

5 に答える 5

1

あなたと似たような状況があります。

複数のドメイン オブジェクトにまたがるレポート データには、個別のオブジェクトを使用します。私たちの慣例では、これらはデータベース内のビューによってサポートされるため、これらをビュー オブジェクトと呼ぶようになりました。通常、複雑なデータをフラットな形式に要約するために使用します。

于 2008-09-09T12:39:56.227 に答える
0

データ転送オブジェクトについて読んだ後は、気分が良くなるかもしれません。何人かの人々は彼らを好きではありませんが、それがあなたにぴったりだと感じるなら、それはおそらくそうです。

于 2008-09-09T14:40:08.187 に答える
0

@DrPizza

より具体的に説明します。データベースに 3 つのテーブルがあります

USER
PROJECT
TASK
USER to TASK 1:n
PROJECT to TASK 1:n

すべてのプロジェクトのリストを返すクエリがありますが、グループ化された情報 (すべてのタスク、進行中のタスク、終了したタスク) も表示します。返されると、クエリは次のようになります

PROJECTID: 1
NAME: New Web Site
ALLTASK: 10
OPENTASK: 7
CLOSEDTASK: 3

この情報を表現できるドメイン クラスがなく、Project クラスに特定のメソッド (getAllTask​​s、getOpenTasks など) を作成したくありません。これらのメソッドのそれぞれが新しいクエリをトリガーするからです。問題は、その情報を保持するためだけに新しいクラス (ProjectTasksQuery のようなもの) を作成するということです。配列またはマップ内で情報を返しますか? 他の何か?

于 2008-09-09T12:43:27.593 に答える
0

私は通常、SQL を使用してクエリを実行し、結果をリストまたは辞書に入れる関数を作成します (Java では、ArrayList または HashMap を使用します)。

これを頻繁に行う場合は、これらのクエリをすべて保持する新しいファイルを作成するでしょう。それ以外の場合は、必要な/使用されたファイルでそれらを機能させるだけです。

ここでは特に Java について話しているので、別のファイルに新しいクラスを作成することは絶対にしません。ただし、1 つのクラスでのみ必要なクエリの場合は、そのクラスで必要なクエリを生成するために必要な関数のみを含むプライベートな静的内部クラスを作成できます。

于 2008-09-09T12:22:57.143 に答える
0

その機能をある種のマネージャーにまとめるというアイデアは、常に素晴らしいものです。これにより、より優れたテストとスキーマ変更の管理が可能になります。

また、アプリケーションでの再利用が容易になります。SQLを直接入れないでください!!!。Hibernate については、HQL がまさにこれに最適であることがわかりました。特に、名前付きクエリを使用できる場合。また、フィルター値などの追加には注意してください。「文字列追加」を使用し、パラメーターを使用します (SQL インジェクションと言えますか?)。SQL が結合または where 基準に関して動的である場合でも、何らかのマネージャーで関数を使用することが常に最善です。

于 2008-09-09T12:39:24.683 に答える