2010-05-16 14 views
3

Lors de l'application de la conception pilotée par domaine à un projet, comment identifiez-vous les racines agrégées? Par exemple, dans un site Web E-Commerce standard, vous pouvez dire que l'ordre est un et que l'utilisateur est l'autre. Mais que se passe-t-il si vos utilisateurs appartiennent à une société? Est-ce que cela fait de votre entreprise la racine agrégée?Quelle méthode utilisez-vous pour identifier les racines agrégées dans la conception de disque de domaine?

Je suis curieux d'entendre les approches des gens pour travailler sur les racines agrégées et comment identifier les racines agrégées mal choisies.

Répondre

5

Une bonne façon d'identifier la racine agrégée est d'utiliser le test "delete". Dans votre domaine si vous supprimez la racine, qu'est-ce qui est supprimé avec? De cette façon, vous pouvez identifier la propriété de l'objet du domaine, qui est un trait des agrégats.

Les agrégats créent également des limites de cohérence. Votre racine doit donc "masquer" les éléments agrégés du reste du graphe d'objet et vérifier leur cohérence et leurs invariants. L'objet à l'intérieur de l'agrégat contient uniquement des références à la racine (pas les unes aux autres). Donc, si vous trouvez quelque chose comme ça dans votre modèle de domaine, cela peut suggérer que vous avez une racine agrégée.

+0

À droite, j'ai donc une entité utilisateur qui peut effectuer un ensemble d'actions, comme faire des ventes, mettre à jour son profil, e.ct. Il semble que cet utilisateur serait un agrégat racine. Cependant, une société a un ensemble d'utilisateurs. Supprimer une entreprise supprimerait les utilisateurs. Est-ce que cela fait d'une compagnie la racine agrégée, ou sont-ils tous les deux des racines agrégées ?! – Robert

+0

@Robert Vous n'avez pas besoin d'utiliser Aggregate pour chaque association multiple, vous pouvez utiliser par exemple. Composite aussi. C'est à vous de décider ce qui vous convient le mieux. Les agrégats sont utilisés pour simplifier votre modèle de domaine, mais vous n'avez pas besoin de l'utiliser. –