J'essaie de conserver la couche de mon domaine aussi "pure" que possible sans se soucier de la persistance ou d'autres problèmes d'infrastructure. Cependant, il y a des moments où ma couche de domaine a besoin d'utiliser les services d'un RDBMS ou d'une autre dépendance externe et je ne suis pas sûr de la façon de gérer cela. Par exemple, chaque objet de domaine dans mon application implémente une interface IValidatable qui est invoquée par les clients pour obtenir une liste de règles brisées qui empêchent l'objet d'être persisté. Dans quelques cas, la routine de validation mentionnée ci-dessus implique de faire un appel à une classe DAO pour vérifier l'existence d'un enregistrement spécifique. Nous n'utilisons pas d'ORM; à la place, nous utilisons une couche de persistance construite à l'aide du modèle d'objet d'accès aux données. Dois-je simplement créer une classe service/wrapper autour de cet accès à la base de données et faire en sorte que mon objet domaine collabore avec? L'ajout de ce niveau d'indirection est-il acceptable ou suis-je encore en train de polluer mon objet domaine?Accès au calque de domaine pour les éléments de persistance
Répondre
La réponse habituelle serait d'utiliser une interface objet-relationnelle quelconque. Votre couche Domaine présente l'interface de votre modèle de domaine. Vous avez une base de données relationnelle sous les couvertures, et vous avez besoin d'une couche entre eux pour effectuer object-relational mapping. Vous dites "nous n'utilisons pas un ORM" mais en fait vous l'êtes: vous effectuez ce mappage directement dans la couche domaine.
Le problème de la réalisation de cette correspondance est connu sous le nom de problème object-relational impedance mismatch. Si vous insistez pour ne pas identifier une couche ORM explicite, alors oui, vous devez écrire des classes pour encapsuler les détails de l'utilisation du SGBD (bien sûr, vous y aurez introduit des classes ORM).
Vraiment, il est très difficile d'éviter d'avoir une couche ORM.
J'ai longtemps été d'avis que vous ne pouvez pas cacher la connaissance de la persistance dans un objet de domaine persistant. Essayer de le faire devient de plus en plus artificiel et introduit des effets secondaires bizarres. En d'autres termes, je pense qu'il est bon d'intégrer la connaissance de la persistance dans la couche domaine, mais pas nécessairement le moyen exact de persistance; une interface DAO doit être utilisée.
Je devrais ajouter que, selon votre vérification de validation, vous êtes soumis à une condition de concurrence. Vous devriez être prêt à gérer toutes les exceptions de contraintes qui pourraient survenir à cause de cela.
- 1. Accès au fichier inter-domaine Simple_XML désactivé
- 2. Regexp pour la validation des noms de domaine .au
- 3. arrêt accès racine sous-domaine
- 4. Accès aux mêmes éléments de nom pour plusieurs sources
- 5. éléments Accès d'un dictionnaire plist
- 6. accès au script via les autorisations
- 7. persistance Workflow pour plusieurs flux de travail
- 8. Persistance de l'objet lié au modèle en utilisant Entity Framework
- 9. Accès Requête au fichier txt sans les noms de colonne.
- 10. Accès aux éléments avec des décalages en Python pour .. dans les boucles
- 11. Accès aux éléments de travail pour les utilisateurs non visuels du studio
- 12. Accès à la base de données Sharepoint dans un domaine
- 13. Accès interdomaine dans iframe de l'enfant au parent
- 14. Service de persistance SQL
- 15. JQuery insertion d'un calque au-dessus du contenu existant
- 16. Accès à HttpApplicationState au cours de Session_End
- 17. au regex domaine
- 18. Filetage pour les éléments iframe dans IE
- 19. Accès à tous les éléments d'un élément GridEditable dans RadGrid
- 20. bind ip au sous-domaine
- 21. jQuery sélectionner les éléments au 1er "niveau"
- 22. Persistance de couture à distance
- 23. Répéteur imbriqué ASP.NET Accès aux éléments
- 24. Comment obtenir le point de calque?
- 25. gestionnaires d'événements pour les éléments de contextmenustrip
- 26. Comment lier dans la connexion d'un serveur de domaine pour les droits d'accès au programme
- 27. Java accès au grand fichier
- 28. bind ip au sous-domaine
- 29. persistance Flux de travail - WebServiceInputActivity
- 30. Ajout de nouveaux éléments au texte Substring
Comment l'enregistrement spécifique est-il lié à l'objet de domaine? –