6 votes

DDD, un agrégat peut-il gérer un événement provenant d'un autre agrégat ?

Est-il possible de gérer un événement dans un agrégat publié à partir d'un autre agrégat ? Ou bien un domaine ne doit-il gérer que des commandes ?

Dans mon cas, j'ai une application qui gère les paramètres. J'ai un agrégat pour l'application et un agrégat pour l'applicationGroup. Lorsque je veux créer des paramètres pour un groupe spécifique d'applications, la commande est gérée par mon applicationGroup, puis l'applicationGroup publie un événement GroupSettingsCreated, mais est-ce que DDD dit que nous pouvons gérer cet événement directement dans mon ApplicationAggregate ? Ou dois-je gérer cet événement dans un gestionnaire d'événements, le convertir en commande et l'envoyer à mon ApplicationAggregate ?

Remerciements

Jean

1voto

Jeff Sternal Points 30147

Si vous êtes tenté de gérer l'événement d'un agrégat à l'intérieur d'un autre agrégat, le gestionnaire doit être un enfant de l'agrégat qui génère l'événement.

En d'autres termes, dans cette contexte délimité , Application doit être un enfant de ApplicationGroup y ApplicationGroup.CreateSettings() doit propager les paramètres à ses applications enfants.

Une autre façon de voir les choses : un "groupe d'application" n'est peut-être pas un véritable agrégat, mais plutôt une commodité offerte par l'interface utilisateur.

0voto

Eric Farr Points 1983

John, je ne connais rien dans le DDD qui réponde à votre question. Il s'agit en fait d'une question de Architecture pilotée par les événements (EDA) et Requête de commandement Séparation des responsabilités (CQRS).

Pour donner des conseils plus précis, j'aimerais savoir quels rôles jouent les entités application et applicationGroup. BTW, cela ressemble plus à des concepts d'application/infrastructure qu'à des concepts de domaine.

En général, j'utilise des commandes où l'action suivante est logiquement poussée depuis la source (l'action suivante est une étape nécessaire). J'utilise les événements lorsque l'action en question est logiquement une réaction au comportement en amont (le code en amont n'est pas conscient de cette réaction à ce qui vient de se produire).

0voto

clarkk Points 21

Vous ne devriez pas procéder de cette manière, car cela conduirait à un code désordonné. Utilisez plutôt sagas pour l'orchestration de l'am. Voici également une bonne vidéo d'Andreas Öhlund sur les sagas dans NServiceBus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X