2009-06-07 7 views
0

Lequel de ces exemples serait le meilleur moyen d'exposer une collection d'ordres pour une personne spécifique qui contient un produit spécifique et pourquoi? Ou peut-être y a-t-il une meilleure façon de faire tout cela? (Désolé je suis nouveau à la modélisation de domaine). La liste Orders est extraite de la base de données avec une requête SQL et transformée en une collection List.Où exposer les résultats d'une requête SQL spécifique dans le modèle de domaine

Une personne a 1 à plusieurs commandes et une commande comporte 1 à plusieurs produits.

 
1) 

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

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

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

Répondre

1

I ne serait pas exposer un tel procédé directement sur l'objet de domaine lui-même, qui encapsule les données. J'utiliserais plutôt le pattern DAO appliqué au domaine Order. Ce qui, en substance, est une variante de votre # 2:

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

De cette façon, les différents modes d'accès que vous devez ajouter au fil du temps sont séparés de l'objet de domaine de la commande.

+0

Merci, c'est très utile. Puis-je demander, que feriez-vous dans une situation où la relation est plus simple, par ex. Personne et tous les ordres associés. Souhaitez-vous le modéliser comme une autre méthode sur le DAO Orders ou comme une collection Person.Orders? Person.Orders pourrait appeler la méthode OrdersDAO passant dans une référence à lui-même? –

0

Une personne peut toujours avoir une collection .Orders qui a toutes ses commandes. Ensuite, il devient une question de chargement paresseux de peupler cette collection lorsque vous savez que vous allez en avoir besoin. Quelque chose comme N/Hibernate aide beaucoup ici.

Questions connexes