2013-02-05 4 views
2

Comment gérer de nombreuses relations avec un modèle DAO? DAO est-il responsable de la liaison de deux entités à l'aide de la table de liaison 3-ème? Par exemple j'ai 2 entités: Customer et Product.DAO. Relation plusieurs-à-plusieurs

et je dois fournir des méthodes comme:

public void assignCustomerToProduct(...); 
public List<Product> getSelledProducts(long customerId); 

Cette méthode nécessite l'utilisation de la table 3-ème comme table de liaison. Est-ce que CustomerDao est responsable de fournir cette méthode? Ou est-il préférable d'exclure ces méthodes dans la couche de service?

+0

BTW, nous n'avons pas "Selled" en anglais. Peut-être, vous voulez dire "Vendu";) –

Répondre

1

L'un des objets doit posséder la relation. Ainsi, par exemple, les positions ne sont enregistrées que lorsque vous enregistrez un employé. Si vous faites cela, Employee devient un (un peu) comme une racine agrégée (si vous parlez de dépôts DDD). Le référentiel est alors responsable de la création de la position si nécessaire et de l'insertion de l'entrée many-to-many dans la table de liens.

Si Position est une racine agrégée elle-même, alors EmployeeRepository est uniquement responsable de la mise à jour de la table de liens, mais n'est pas responsable des Positions persistantes.

+0

Désolé, je n'utilise aucun modèle de Repository. Quelqu'un a édité ma question et a ajouté la balise 'repository-pattern'. En vrai j'utilise des patterns DAO _only_ et encore plus je ne sais pas ce qu'est le pattern Repository et comment l'utiliser. Ma question est conforme au modèle DAO. Ou plus spécialement - 'GenericDAO'. P.S. J'utilise JDBC. ... Et si vous pouvez fournir certains avantages du modèle de dépôt sur DAO et pourquoi il vaut mieux utiliser Repository à la place DAO je suis prêt à changer mon code :) – MyTitle

+0

Ils sont très similaires, mais Repository est utilisé avec Domain Driven Design (DDD) et il a quelques restrictions sur ce qu'il devrait faire. Je pense que la plupart de ce que j'ai écrit ci-dessus s'applique toujours. Par exemple, votre EmployeeDAO peut être responsable du stockage de l'employé et des lignes dans la table de liens entre les employés et les postes. Avoir une relation vraiment bidirectionnelle où stocker soit persistera quelque chose à la table de liens est beaucoup de travail, et peut-être pas la peine. – Augusto

+0

'Si Position est une racine agrégée elle-même, alors EmployeeRepository est uniquement responsable de la mise à jour de la table des liens, mais n'est pas responsable des Positions persistantes. Il n'est donc pas mauvais d'avoir des méthodes comme' EmployyDAO'? – MyTitle