2009-04-07 7 views
1

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

1

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.

+0

Qu'est-ce que cela a à voir avec un design dominé par le domaine? – jlembke

+1

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

5

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.

+0

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? –

+0

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

Questions connexes