2009-08-18 1 views
0

私はリポジトリ用のCRUD画面を構築しています。メンバーオブジェクトは、検索結果を生成するときと同じように、たくさんのものを一度にたくさんメモリにロードしたくないほど十分に大きいものです。リポジトリパターン:メンバーをリストするための戦略

検索結果に必要なのは、「名前」と「ID」などの2つのプロパティがあるからです。は基本のデータベースを照会できますが、リポジトリをバイパスすることは望ましくありません。その価値を否定するでしょう。

私が見つけたリポジトリパターンのイントロとチュートリアルでは、このシナリオをカバーしていません。一度に1つの完全に埋め込まれたオブジェクトを保存/取得/削除することに重点を置いています。

遅延読み込みオブジェクトのプロキシパターンに慣れています。しかし、それは大きな男の子がそれをやっているのですか?この問題の解決策は確立されていますか?

答えて

1

DDDに厳密に従えば、あなたの検索では完全に人口が多いオブジェクトが返されるはずです。しかし時にはルールを曲げる必要があります。

私はやっていない何かを伝えることができます:

  1. が必要なデータのみを取得し、まだエンティティクラスのではない-フル実装のインスタンスを返しません。これは簡単に災害になる可能性があります。完全に読み込まれたエンティティを返すと思われるさまざまなクエリメソッドがありますが、実際に呼び出されたクエリメソッドによって異なります。混乱を予想する。

  2. 独自の遅延初期設定方式を使用しないでください。それは困難でエラーを起こしやすい。私はこれを一度やったことがあり、努力する価値がないと私は安全に言うことができます。

だから、何が残っていますか?私の投票では、必要なデータを取得し、作成しようとしているフィールドだけを持つクラスを作成し、それらのリストを返します。現在、検索機能を呼び出す人は、実際のデータのサブセットである取得しているものを正確に把握しています。完全なエンティティが必要なときは、再度データベースにヒットする必要があります。ここで

は、私はJavaで何を意味するかの例です:

public class CakeRepository { 
    public List<CakeProjection> getCakesByManufacturer(String manufacturer); 

    public Cake getCake(long id); 

    ... 
} 

public class CakeProjection { 
    private long id; 
    private String cakeName; 

    ... 
} 
+0

はい、はい、はい、すべて意味があります。どうもありがとうございました。今私は、これらの部分的なエンティティの名前を考え出す必要があります。 "投影"、ハァッ...? – Metaphile

0

リポジトリインタフェースでクエリを定義すると、後でデータを引き出すことができます。

私は大男がORM層(Hibernateのような)を使い、ORMに定義されたクエリを渡すと思います。

+0

だから、クエリは、私は、名前とIDで唯一興味ことを指定した場合、私のリポジトリは、そのプロパティのほとんどとオブジェクトのセットを返すことができますNULLに設定しますか? – Metaphile

+0

受け入れられた答えは私には良いようです。 – mcintyre321