Si je comprends bien toutes les entités DDD doivent avoir un ID. Donc, ma question est dans une relation de détail principal, par exemple un produit et un produit, si le ProductDetail avait une connaissance du produit? Est-il nécessaire avec une propriété ProductID dans la classe ProductDetail? Dans une base de données, c'est normal, car c'est la seule façon de lier les deux objets, mais est-ce la meilleure pratique dans DDD? J'utilise Linq2Sql en tant que mappeur ORM, donc cela est donné mais je pense que ce n'est pas la bonne façon. Quelqu'un avec quelques mots de sagesse à ce sujet?DDD, entités apparentées dans les relations de détail maître
Répondre
Les clés étrangères sont des artefacts du modèle de données relationnel. Le modèle d'objet fonctionne avec le concept de conteneur. Ainsi, Order contient une collection de lignes de commande. La ligne de commande contient le produit, etc.
Comment les utilisateurs finaux récupèrent-ils ProductDetail? Si la réponse est qu'ils y accèderont probablement depuis le Produit, alors ProductDetail est simplement une propriété de Product, ou une partie d'une collection de ProductDetails qui est une propriété du Produit. Par conséquent, dans votre code orienté objet, les objets ProductDetail n'auront pas besoin d'une référence au produit parent.
Maintenant dans votre base de données, vous aurez probablement une table principale pour le produit avec une colonne Id. Vous avez ensuite une table enfant pour ProductDetail qui a une clé étrangère à l'ID du produit auquel il est associé.
C'est très important de se rappeler que les principes de conception par domaine s'appliquent uniquement à votre code OO. Les bases de données relationnelles et la modélisation de données relationnelles sont complètement différentes.
Comment câbler les deux modèles ensemble à l'aide d'un ORM? L'ORM vous fera définir les clés Foriegn dans la classe ProductDetail? Existe-t-il des ORM qui peuvent gérer le modèle de domaine sans définir le ProductId? Raw SQL est la seule méthode? –
J'ai toujours roulé ma propre couche d'accès aux données, plutôt que d'utiliser un ORM. La plupart des bons outils ORM, comme NHibernate, devraient vous permettre de créer des tables enfants dans la base de données qui ont une référence de clé étrangère à la table parente. Si vous configurez ORM correctement, votre référentiel peut récupérer le parent et l'enfant dans le même agrégat DDD. – dthrasher
- 1. (Rails) Diverses associations entre entités non apparentées?
- 2. Vue maître-détail ASP.NET MVC
- 3. (N) Hibernate: mappages de base/maître avec les relations
- 4. Formulaire maître/détail dans Axapta/Dynamics Axe
- 5. Exemple de détail maître de Rails
- 6. Définition de relations plusieurs-à-plusieurs dans DDD
- 7. Implémentation d'un scénario maître-détail simple pour WPF dans MVVM
- 8. Comment insérer des enregistrements dans une relation maître/détail
- 9. Afficher les enregistrements du tableau maître/maître-détail en utilisant requête SQL uniquement
- 10. Meilleure façon de lier les contrôles dans deux fenêtres dans la situation maître-détail
- 11. Colonne de sélection Datagridview pour la relation maître-détail
- 12. Est-il possible de supprimer les enregistrements maître ET de détail dans une instruction SQL?
- 13. Exemple de page ASP.NET maître/détail où les détails sont dans une visionneuse?
- 14. Aide maître/détail nécessaire pour newbie ASP.NET. (capture d'écran aussi)
- 15. MVC + Entités Framework: plusieurs à plusieurs relations
- 16. DDD: Quelles sont les bonnes raisons pour vous de coupler les Entités?
- 17. Configurer la mise en cache sur les entités et les relations dans Fluent Nhibernate?
- 18. nhibernate et DDD suggestion
- 19. Modèle MVC + modèle DDD
- 20. Détail grille dans MFC
- 21. Relations indexées dans les données de base
- 22. structure de gridview de détail principal escamotable
- 23. DDD Question de modélisation
- 24. DDD/Repository
- 25. JavaScript, DHTML, jQuery: Comment implémenter la relation de détail maître bidirectionnel dans 3 listes déroulantes html (cases à cocher)
- 26. DDD Repositories
- 27. Linq2Sql: Puis-je créer des entités avec des relations de clé étrangère sans clé primaire dans les deux tables?
- 28. Supprimer les entités HTML
- 29. NSPredicateEditor et les relations
- 30. Optimiser les entités Hibernate?
Qu'est-ce que cela a à voir avec un design dominé par le domaine? – jlembke
Clé étrangère ProductId dans la classe ProductDetails n'a rien à voir avec DDD - C'est un artefact du modèle de données relationnel. C'était mon point. – Prankster