Bonjour,
En vue d'un nouveau projet qui va m'être confié, une question me turlupine : dans les architectures classiques 3 tiers, je ne vois pas comment gérer correctement mes transactions dans mon futur code.
Je m'explique. Prenons le cas classique d'une université : un élève s'inscrit et il faut l'ajouter dans une classe et à l'internat.
Je vais donc faire :
- Une classe EleveDAO
- Une classe service Eleve
- Une classe ClasseDAO
- une classe service Classe
- Une classe InternatDAO
- une classe service Internat
Je continue J'ai maintenant besoin de faire une classe Inscription, dans laquelle je fais une méthode "inscrire" qui fait par exemple (le code ci-dessous est mauvais, mais c'est pour l'exemple )
- Eleve.Ajouter() qui appelle EleveDAO.Ajouter(me)
- Classe.AjouterEleve() qui appelle ClasseDAO.AjouterEleve(...)
- Internat.AjouterPensionnaire qui appelle InternatDAO.AjouterPensionnaire(..)
Bien entendu, si une des ces méthodes ajouter échoue, il faut faire un rollback. Il faudrait donc que ce soit les procédures de la couche "service" qui gèrent les transactions. Mais :
- il faut que mes classes service restent indépendantes de la technologie utilisée par la couche DAO.
- si chacune des classes services gèrent leurs propres transactions, il faudrait dans chacune d'elles, avant de démarrer une transaction, vérifier qu'aucune n'est en cours.
Comment faire donc pour faire propre et simple ? Utiliser des outils fournis par nHibernate ? J'ai fouillé partout sur le net sans trouver de réponse claire à mon problème.
Merci pour vos futures lumières
Partager