- Dans le code de la consommation? (comme un contrôleur)
- Dans les référentiels?
- Dans les services?
Répondre
Pour commencer, c'est une question assez controversée, alors vous aurez forcément beaucoup de réponses différentes. De mon point de vue, les transactions (ACID) sont une caractéristique de certains mécanismes de stockage (notamment les bases de données relationnelles), donc je considère le concept spécifique à la technologie. Avant que quiconque proteste que ce n'est un argument théorique considère qu'il existe plusieurs cas imaginables où le magasin de données (Référentiels) ne serait pas transactionnel:
- Beaucoup entreprise à grande échelle (comme par exemple Amazon) ne pas utiliser transactions pour des raisons de performance. Au lieu de cela, ils ont une architecture qui leur permet de faire face aux défaillances
- services de données REST
- Double test
Puisque les modèles de domaine doivent être découplés de mises en œuvre spécifiques, je trouve logique qu'ils ne savent rien à propos des transactions. Cependant, cela signifie également que les référentiels doivent exposer des opérations de la bonne granularité pour qu'ils puissent, eux-mêmes, gérer les transactions, s'ils le désirent, et qu'une opération soit garantie de succès ou échoue dans son intégralité. En d'autres termes, les référentiels doivent gérer les transactions (le cas échéant).
Il y a cependant des situations où cela peut exiger des Référentiels d'avoir trop de connaissances du domaine, de sorte que le modèle de conception Unit of Work fournit une bonne abstraction pour les cas où vous avez vraiment besoin d'une transaction (potentiel) pour couvrir plusieurs opérations sur plusieurs référentiels différents.
- 1. Liaison DropdownList dans la conception pilotée par domaine
- 2. Problème d'agrégat racine dans la conception pilotée par domaine
- 3. Conception pilotée par domaine dans la programmation fonctionnelle?
- 4. Suite de la conception pilotée par domaine avec MVVM/WPF
- 5. Application de mvc à la conception pilotée par domaine
- 6. Quand la conception pilotée par domaine est-elle adéquate?
- 7. Comment est-ce que l'un implémente des listes dans la conception pilotée par domaine?
- 8. Formulaires MVC .NET avec une conception pilotée par domaine
- 9. Conception pilotée par domaine: racine agrégée et racines agrégées secondaires
- 10. Options de câblage automatique IoC dans la conception pilotée par domaine
- 11. Utilisation de la Doctrine avec la conception par domaine
- 12. DDD: conception pilotée par domaine. Que signifie le domaine dans DDD?
- 13. En quoi la conception pilotée par domaine est-elle différente de l'utilisation d'une spécification?
- 14. Comment la conception pilotée par domaine peut-elle être combinée à une programmation orientée aspect?
- 15. Passer la liste des exceptions Retour à l'appelant - Conception pilotée par domaine
- 16. Quels problèmes trouvez-vous avec cette vue sur la conception pilotée par domaine?
- 17. Comprendre la conception guidée par domaine
- 18. Conception pilotée par domaine - module centré sur les données dans un système DDD plus grand
- 19. Conception par domaine Question
- 20. Comment gérez-vous le motif composite lors de l'utilisation d'Hibernate et de la conception pilotée par domaine?
- 21. Conception pilotée par domaine - API de données externes en tant que référentiel ou service
- 22. Question de conception pilotée par domaine sur les services et les dépôts
- 23. Comment tester la logique de domaine générique
- 24. Conception pilotée par domaine: Regrouper les racines avec des collections volumineuses
- 25. Conception client/serveur pilotée par événement avec C++
- 26. Conception de l'interface utilisateur: modèles pour l'application pilotée par assistant?
- 27. Logique de domaine partagé?
- 28. Agrégats de conception pilotés par domaine
- 29. Cet exemple de service de référentiel d'entités s'intègre-t-il dans la conception guidée par domaine?
- 30. conception OO pour la logique métier
+1 pour les référentiels. Je suis enclin à être d'accord avec vous que les transactions sont spécifiques à la technologie. Cependant, les unités de travail sont spécifiques à l'application, alors je me demande comment vous déconnectez la technologie de vos unités de travail. Le référentiel doit-il vraiment avoir connaissance de votre domaine d'activité? –
@Robert Harvey: Merci. Unité de travail est un modèle très pertinent et je ne sais pas comment j'ai réussi à l'oublier momentanément en écrivant ma réponse ... Le référentiel doit avoir une certaine connaissance du modèle de domaine sauf si vous voulez décomposer toutes les entrées et sorties en types primitifs (pas une bonne idée IMO), mais je suis d'accord que la connaissance ne devrait pas s'étendre à la logique métier. Je vais mettre à jour ma réponse. –
Il semble raisonnable que dans la plupart des cas, la logique transactionnelle devrait résider dans des dépôts. Cependant, en utilisant une unité de travail, l'OMI décalerait la responsabilité d'un cran. Où le verriez-vous mieux, niveau d'application ou service? Je ne peux pas penser à une bonne raison de se porter garant de l'un ou de l'autre sans un contexte spécifique ...? – julien