Dans ma conception, j'ai des classes de Repository qui obtiennent des Entités de la base de données (Comment ça fait que cela n'a pas d'importance). Mais pour sauvegarder les entités dans la base de données, est-ce logique de faire en sorte que le dépôt le fasse aussi? Ou est-il plus logique de créer une autre classe (comme UnitOfWork), et de lui donner la responsabilité de sauvegarder des choses en lui faisant accepter des Entités, et en appelant le save()
pour lui dire d'aller de l'avant et de faire sa magie?Les référentiels devraient-ils à la fois charger et sauvegarder des entités?
Répondre
Dans DDD, les dépôts sont définitivement où ALL choses liées à la persistance devrait résider.
Si vous avez sauvegardé et chargé à partir de la base de données encapsulée dans plusieurs classes, le code lié à la base de données sera réparti sur un trop grand nombre d'endroits dans votre base de code - rendant ainsi la maintenance nettement plus difficile. De plus, il y a de fortes chances que les lecteurs ultérieurs de ce code ne le comprennent pas à première vue, car une telle conception n'adhère pas aux quasi-standards que la plupart des développeurs s'attendent à trouver.
Bien sûr, vous pouvez avoir des classes Reader/Writer-helper séparées, si cela est approprié dans votre projet. Mais vu du Business Layer, la seule passerelle vers la persistance devrait être le référentiel ...
HTH!
Thomas
Je donnerais au référentiel la responsabilité globale de l'encapsulation de tous les aspects de la charge et de l'enregistrement. Cela garantit que les problèmes délicats tels que la gestion des conflits entre les lecteurs et les écritures ont une place à gérer.
Le référentiel peut très bien utiliser votre classe UnitOfWork et peut nécessiter l'affichage de méthodes BeginUow et Commit.
Fowler says que api de dépôt doit imiter collection:
Un dépôt intermédiaire entre les couches de domaine et de mappage de données, agissant comme une collection d'objets de domaine en mémoire .
- 1. Form Designer Sauvegarder et charger
- 2. cookielib: Comment sauvegarder les cookies Python et le charger?
- 3. Comment interroger plusieurs entités à la fois?
- 4. Sauvegarder et charger une seule valeur, iPhone
- 5. WPF 3D - Comment sauvegarder et charger une vue caméra?
- 6. Utilisation de git et svn à la fois en tant que référentiels partagés
- 7. Confusion à propos de Linq to SQL et des référentiels
- 8. Enregistrement de plusieurs entités enfants dans NHibernate, à la fois
- 9. Sauvegarder et charger le fichier XML avec flex
- 10. TinyXML et la préservation des entités HTML
- 11. Est-il correct d'avoir des références à des référentiels dans les façades
- 12. Git et plusieurs référentiels
- 13. Sauvegarder des images dans la photothèque Iphone
- 14. DDD et Référentiels usines
- 15. Architecting ASP.net MVC App utiliser des référentiels et services
- 16. Sauvegarder et restaurer les applications et la mise en page
- 17. Liste des référentiels subversion
- 18. Active X lent à charger la première fois
- 19. références des entités et lxml
- 20. Sauvegarder et charger des données quand l'application est en cours d'exécution
- 21. Comment puis-je sauvegarder et charger MS-SQL en préservant les colonnes d'identité?
- 22. Comment charger élément xml une à la fois AS3
- 23. MSCRM: Comment créer des entités et définir des relations à l'aide du fournisseur xRM linq
- 24. Quelqu'un at-il un script pour gérer plusieurs référentiels hg à la fois?
- 25. Linq pour les entités et la logique métier
- 26. Associer des tags à des entités, stocker le tag une fois ou non?
- 27. tinyxml et C++ pour sauvegarder les données
- 28. Comment charger l'image une fois
- 29. Comment sauvegarder un référentiel SVN avec rsnapshot, lorsque les horodatages diffèrent à chaque fois?
- 30. Sauvegarder des objets appartenant à l'enfant/Hibernate