2009-06-07 13 views
0

特定の製品を含む特定の人物の注文コレクションを公開する最も良い方法は、次のうちどれですか?それとも、これを行うにはもっと良い方法がありますか? (申し訳ありませんが、私はドメインモデリングを初めて利用しています)。 Ordersリストは、SQLクエリを使用してデータベースから取得され、Listコレクションに変換されます。ドメインモデル内の特定のSQLクエリの結果を表示する場所

人は1から多くの注文があり、注文には1から多くの商品があります。

 
1) 

class Person 
{ 
    List OrdersContaining(Product p) 
    {.....} 
} 
 
 
2) 

class Order 
{ 
    List ForPersonContainingProduct(Person person, Product product) 
    {.....} 
} 
 
 
2) 

class Product 
{ 
    List OrdersFor(Person p) 
    {.....} 
} 
 

答えて

1

私はデータをカプセル化ドメインオブジェクト自体に直接そのような方法を公開しないであろう。むしろ、Orderドメインに適用されるDAOパターンを使用します。これは、本質的に、あなたの#2のバリエーションです:

class OrderDAO { 
    List<Order> listByPersonAndProduct(Person person, Product product){ 
     ..... 
    } 
} 

この方法で、あなたが時間をかけて追加する必要があるアクセスの様々なパターンが注文ドメインオブジェクトから分離されています。

+0

ありがとう、これは非常に役に立ちます。私は、関係がもっとシンプルな状況であなたはどうしますか?個人および関連するすべての注文。 Orders DAOでもPerson.Ordersコレクションとして別の方法としてモデル化しますか? Person.OrdersはOrdersDAOメソッドを呼び出して自分自身への参照を渡すことができますか? –

0

Personはまだすべての注文を持つ.Ordersコレクションを持つことができます。そして、あなたがそれを必要としていることが分かっているときに、このコレクションにデータを読み込むという、怠惰な読み込みの問題になります。 N/Hibernateのようなものは、ここでたくさん役立ちます。

関連する問題