Meilleures pratiques Spring-MVC: Pourquoi atsortingbuer des transactions à des services plutôt qu’à des DAO?

J’apprends Spring-MVC dans mon premier projet ici.

Après avoir lu la documentation sur les transactions, j’ai constaté que tous les exemples plaçaient des transactions autour des objects / méthodes de service , et non de DAO (objects / méthodes d’access aux données).

Je me demandais pourquoi. Sans en savoir plus, je penserais à append des transactions autour de la plupart de mes méthodes DAO qui accèdent à la firebase database (ma pensée: firebase database = transactions). Je n’ai pas encore beaucoup de méthodes de service couvrant plusieurs DAO (mais je suppose que cela pourrait être une raison pour marquer les services comme transactionnels).

La question:
Je veux juste savoir ce que les autres font dans cette situation. Placez-vous naturellement les transactions autour de l’élément de niveau le plus bas possible (par exemple, toujours autour des DAO et autour des services uniquement lorsqu’ils couvrent plusieurs DAO de manière à nécessiter des transactions)?

Ou bien vous concentrez-vous uniquement sur les transactions relatives aux services en tant que principe général? Vous vous en tenez donc à une couche parce que c’est plus global à long terme?

Pour mon argent, j’essaie de mettre la transaction au point le plus grossier possible dans l’application, il s’agit généralement d’un object de type service / gestionnaire qui coordonne les appels vers un ou plusieurs appels Dao gagnés plus fins.

En théorie, vous pouvez placer des transactions partout, des services aux daos, en supposant qu’elles soient définies pour rejoindre une transaction existante si nécessaire. En pratique, j’ai trouvé cela moins utile que cela, car il est inutile et ne vous ennuiera que lorsque vous essayez de déboguer le code.

Ceci est fait pour que les données que vous avez sélectionnées / interrogées à partir de la source de données restnt valides pendant que vous les traitez.

Dans les autres cas (en plaçant des transactions sur DAO), les données peuvent être modifiées pendant le traitement des données et peuvent donner des résultats erronés.

Les autres réponses sont exactes, mais pour append de la couleur aux réponses: la transaction effectuée au niveau service doit encapsuler une logique atomique. Étant donné que cette logique métier doit être autonome, sans ingérence de la part d’une autre logique métier, les transactions doivent se situer au niveau des services.