2009-06-11 8 views
1

ドメイン駆動設計では、部分的な値を持つことが許可されたエンティティのコレクションプロパティですか?DDDでは、部分的な値を持つことが許可されたエンティティのコレクションプロパティですか?

たとえば、Customer.Orders、Post.Comments、Graph.Verticesなどのプロパティには常にすべての注文、コメント、頂点が含まれているか、今日の注文、最近のコメント、孤立した頂点を持つことが許可されていますか?

はそれに対応して、リポジトリは

GetCustomerWithOrdersBySpecification 
GetPostWithCommentsBefore 

などのようなメソッドを提供する必要がありますか?

答えて

1

私はDDDがあなたにそうするかどうかを指示しているとは思わない。構築するシステムと解決する必要のある特定の問題に強く依存します。

これについてのパターンについて聞いたこともありません。

主観的には、エンティティは定義によって(遅延読み込みを考慮して)完了し、クライアントに送信されるデータの量を最適化するためにDTOに完全にまたは部分的にロードする必要があります。しかし、問題を解決するには、データベースから部分的なエンティティを読み込むことに気をつけません。

+0

DDDはリポジトリから集約ルートを取得するように指示していますが、コレクションのプロパティに何が起こるべきかを知らせません(怠け者かどうかは関係ありません)。 – Prankster

+0

それは私が言っていることです。 DDDのアドバイスが不足しているため、私はいくつかの個人的な提案を加えました。あなたが怠惰なローディングを持っているならば、例えば。 NHibernateを使用すると、エンティティの完全性について多くのことを気にする必要はありません。まだ特殊な状況があるかもしれません。 –

1

ドメイン駆動設計でも、サービスの概念があることに注意してください。特定のデータベースクエリを実行するには、親オブジェクトにアタッチされた子オブジェクトのコレクションよりも、サービスとして問題をモデル化する方がよいでしょう。

これは、ユーザーが入力したいくつかのパラメータを受け入れることによってレポートを作成する場合の良い例です。

myCustomer.OrdersCollection.SelectMatching(Date cutoff); 

それとも別の言い方をするために、あなたがデータ入力に使用DDDモデルは同じである必要はありません。このようなより

CustomerReportService.GetOrdersByOrderDate(Customer theCustomer, Date cutoff); 

:これをモデル化しやすくなります報告に使用するDDDモデル

スケーラビリティの高いシステムでは、これらの2つの懸念事項を分離するのが一般的です。

関連する問題