La différence entre une commande et un événement dans la communication par bus me semble un peu vague. Je sais que les commandes ne doivent être exécutées qu'une seule fois, alors qu'un événement peut être géré plusieurs fois, mais je ne sais toujours pas quand utiliser une commande ou un événement.
Regardons un exemple:
Lorsqu'un nouvel utilisateur s'inscrit à une application Web, nous devons lui créer un compte et lui envoyer un e-mail de confirmation.
Création du compte - cela semble être le bon endroit pour envoyer un CreateUserCommand
au bus et laisser un composant spécialisé le gérer.
Ou peut-être que cela ne devrait même pas être mis en œuvre avec une communication par bus asynchrone? Nous voulons que l'utilisateur puisse se connecter immédiatement à l'application. Avec le bus, nous n'avons aucune garantie quand la commande sera exécutée.
Envoi d'email - après que le composant a créé le compte, je peux voir 2 possibilités
- Envoyer une autre commande au bus
SendConfirmationEmailCommand
- Publier un événement
UserAccountCreatedEvent
Et laissez le composant expéditeur d'e-mails le saisir et le faire.
D'une part, je souhaite que l'e-mail de confirmation ne soit envoyé qu'une seule fois (utilisez une commande), d'autre part, je pense qu'il peut y avoir plusieurs composants intéressés par les utilisateurs nouvellement enregistrés. Un enregistreur ou peut-être un expéditeur de SMS.
Comment le mettriez-vous en œuvre?