2010-11-04 47 views
2

Pourriez-vous s'il vous plaît expliquer ce que sont les avantages et les inconvénients de cela? Je veux dire, sans utiliser la spécification ORM framework/JPA.La logique de persistance doit-elle être placée dans les beans de modèle de domaine ou dans les DAO uniquement?

Il s'agit de relations plusieurs-à-plusieurs et plusieurs-à-un entre entités. Imaginez entité relation

professeur - étudiant (many-to-many)

ou

médecin - patient (un à plusieurs)

Ma question est, si nous pourrions mettre la méthode getPatients() à Doctor bean ou getStudents() au bean Teacher, ou si ce devrait être des POJOs et tout ce truc devrait être placé dans DAO lay er. Je vois souvent la première approche à utiliser dans les cas où les haricots du modèle objet étendent les classes qui leur fournissent l'accès aux façades de service/persistance, ou qui sont injectés par le printemps avec eux etc. Il est avantageux que l'on puisse appelez doctor.getPatients(); pratiquement partout dans l'application au lieu d'obtenir les résultats de DAO.

Y a-t-il des situations dans lesquelles la première approche est pratique? Parce que je vois beaucoup de cas où c'est fait exactement comme ça et je me demande si ça a un but ou si c'est de l'amateurisme ou de l'ancien style.

Répondre

1

Suivez le principe KISS. Les DAO sont parfaits pour abstraire la mécanique de la persistance de la logique du domaine. Les objets du domaine portent simplement l'état d'une couche à l'autre, généralement avec très peu de logique métier en leur sein. Cela signifie que les objets de domaine (aka DTO) peuvent avoir beaucoup d'annotationspour indiquer la persistance avec une sorte de structure ORM, ainsi que des annotations JAXB pour permettre aux DTO d'être facilement rassemblés en XML pour transmission par un service Web.

Ma tendance générale est d'avoir un seul objet métier dédié à fonctionner sur un seul DTO pour modifier son état d'une certaine manière entraîné par les règles métier. Un service (qui est la frontière de transaction JTA) gère une collection d'objets métier et forme essentiellement une transaction d'application. Cela suit le principe général OOD de beaucoup d'objets à grain fin avec un objectif très clair.

+0

Je préfère aussi une seule classe d'affaires et de persistance dédiée à fonctionner sur un seul DTO ... mais je ne pense jamais vraiment à un service comme "limite de transaction JTA" qui semble être une très bonne pratique ...bon à savoir – lisak

+0

@lisak Merci pour le vote d'acceptation :-) Vous pouvez jeter un oeil à cette question Stack Overflow: http://stackoverflow.com/questions/1079114/spring-transactional-annotation-best-practice –

4

Vous pouvez faire ce que vous voulez, mais le motif omniprésent est le motif DAO. Le point est separate your concerns. Si vous avez un objet de domaine, il est probable que vous ayez une logique métier. Voulez-vous vraiment mettre la logique de la persistance au-dessus de la logique métier? Votre application deviendra moins facile à maintenir, moins (facilement) testable, et aura plus d'erreurs. Et une fois que vous prenez une décision de conception douteuse, d'autres suivront ...

+0

Je préfère aussi le simple "Spring framework" façon de séparation de préoccupation stricte, ayant pojos et dao couche. Mais certains logiciels (modernes/jeunes) avec lesquels je travaille vont avec la première approche, donc je me demande pourquoi. Je reste juste avec la deuxième approche quant à mon propre développement d'application, c'est sûr – lisak

+0

@lisak vous devriez avoir une approche consistante à travers l'équipe de développement. – hvgotcodes

+0

Je fais mes propres projets, je suis trop fainéant pour être employé :-) Merci pour la réponse – lisak