Je cherche un moyen de concevoir une application ddd avec une convention sur la configuration.
Supposons qu'un agrégat "Client" possède une commande définie "FillProfile". Il déclenchera logiquement un événement "ProfileFilled".
Y a-t-il des cas où une commande déclenchera plus qu'un événement, ou où une commande déclenchera différents événements en fonction d'une logique? Ou s'agit-il toujours d'une relation 1 - 1 (1 commande n'en déclenchera toujours aucune, ou un seul événement d'un type donné).
Je pose cette question parce que si c'est un fait, qu'une commande déclenchera toujours le même événement, je peux construire mon système de convention sur ce fait. Je sais que "RaiseEvent" se traduira par "EventRaised" ...
domain-driven-design
cqrs
event-sourcing
Ludovic C
la source
la source
Réponses:
Puisque vous avez marqué votre question avec "CQRS", je suppose que vous voulez dire des événements dans un contexte "CQRS & Event Sourcing", comme cela est décrit ici . Dans ce tutoriel , la différence entre les événements et les commandes est bien expliquée:
les événements capturent les "choses qui peuvent arriver" élémentaires dans votre système, du point de vue du système.
les commandes sont définies par ce que l'utilisateur considère comme une opération, de son point de vue
Et bien que cela conduise souvent à quelques commandes et événements avec une correspondance 1: 1, ces différents points de vue peuvent conduire à des commandes qui déclenchent plus d'un événement, ou à des événements différents selon les paramètres de commande. Je peux même imaginer des cas où une commande ne déclenche pas du tout un événement, mais ce serait un cas très exceptionnel, pas très typique.
Par exemple, le didacticiel mentionne des événements
et commandes
Ici, la commande "OpenTab" conduira à un événement "TabOpened", mais la commande PlaceOrder conduira aux événements "DrinksOrdered", "FoodOrdered", ou les deux.
En fait, si vous concevez un nouveau système "à partir de zéro", vous pouvez essayer de le concevoir avec une correspondance 1: 1 entre les commandes et les événements et voir à quel point il évolue lorsque le système devient plus grand. Vous pouvez même essayer une approche hybride: une liste d'événements et de commandes avec une correspondance 1: 1, ainsi que quelques commandes combinées supplémentaires. Essayez simplement jusqu'où cela vous mène pour le système particulier que vous concevez.
la source
Habituellement, une commande entraîne un événement. Mais dans certains cas, il peut également y en avoir plusieurs, cela dépend de votre implémentation.
Soit votre commande appelle d'autres commandes et chacune d'elles déclenche ses propres événements. Ou votre commande effectue elle-même différentes tâches et émet plusieurs événements. Par exemple:
RegisterUserCommand
la source
UserWasAddedToCrm
? Réécrire tout votre flux?Une commande peut déclencher plusieurs événements. C'est simplement la conclusion logique d'un fait:
Composite command
existe.Disons que vous avez deux commandes, chacune déclenchant un événement. Ensuite, vous créez une commande composite de ces deux. Du point de vue d'un utilisateur utilisant la commande composite, il semble que la commande ait déclenché deux événements.
Rien ne vous empêche donc d'avoir une seule commande provoquant plusieurs (voire aucun) événements.
la source