2009-04-16 12 views
3

私はDDDの考え方に従い、集約のエンティティオブジェクトに直接アクセスしません。だから、私は関連オブジェクトを取得するためにルートオブジェクトを呼び出す必要があります。しかし、他のケースでは、ルートが呼び出されたときに常に関連するすべてのエンティティをロードする必要はありません。それは怠惰な読み込みの目的ですか?レイジーロードを使用しない集約エンティティへのアクセス

linqのlazyloading機能を無効にすると、関連するオブジェクトを毎回ロードせずに、ルートからエンティティオブジェクトにアクセスするにはどうすればよいですか?

EDIT:

たとえば、私は、ルートエンティティとして人を持っている、と人は名前、住所およびOwnedPropertiesを持っている場合。人々のリストを取得して名前を表示できるようにするには、リポジトリの呼び出し時に毎回Owned Propertiesをロードする必要はありません。逆に、別のページでは、OwnedPropertiesのリストを表示することができますが、他の情報を呼び出しにロードしたくない場合があります。所有プロパティを持たないPersonを呼び出すという簡単な方法は何ですか?

+0

具体的な例を教えてください。 –

+0

おそらくそうではありません。 DDDは実際の例を持たない曖昧な原則の1つです。 – cletus

+1

@Cletus、多くの具体的な例があります。Evansの本を参照してください。 –

答えて

1

怠惰な読み込みがなければ、それは可能ではないと思います。

  • 一度にすべてのデータを取得する:あなたの編集によると、遅延ロード
1

:イーガーロード

  • アクセスしたときにデータを取得 私はこのような状況で何、「表示」クラスを作成することです私が興味を持っているプロパティだけを含む 'DTO'クラスなどがあります。 たとえば、インスタンスのNameプロパティを持つPersonViewクラスがあります。

    次に、私のOR/Mマッパー(私はNHibernateを使用しています)を使用して、私の 'Person'エンティティで動作するHQLクエリ(またはCriteriaクエリ)を作成します。私がクエリを実行する前に、NHibernateに結果として「PersonView」オブジェクトが必要だと伝えます(私は投影を指定します)。次に、NHibernateは、PersonViewインスタンスを生成するために必要なカラムだけを取得するクエリを実行するのに十分スマートです。

  • +0

    、あなたのリポジトリはそれぞれのシナリオに対して過負荷を持っている必要がありますし、どのメソッドをリポジトリで呼び出すのか決定しませんか? – zsharp

    +0

    どういう意味ですか?私のリポジトリには、例えば 'FindPersons'と呼ばれる、PersonViewインスタンスを返すメソッドがあります。 –

    0

    遅延ロードを回避する方法の1つは、オブジェクト 'id'を使用することです。

    関連する問題