在总线通信中,命令和事件之间的区别在我看来似乎有点模糊。我知道命令应该只执行一次,而一个事件可以处理多次,但是我仍然不确定何时使用命令或事件。
让我们看一个例子:
当新用户注册到Web应用程序时,我们应该为他创建一个帐户并发送确认电子邮件。
创建帐户 -这似乎是将a发送CreateUserCommand
到总线并由专门的组件处理的正确位置。
也许这甚至不应该使用异步总线通信来实现?我们希望用户能够立即登录到应用程序。对于总线,我们无法保证命令将在何时执行。
发送电子邮件 -组件创建帐户后,我可以看到2种可能性
- 向总线发送另一个命令
SendConfirmationEmailCommand
- 发布活动
UserAccountCreatedEvent
而不是让电子邮件发件人组件抓住它并完成任务。
一方面,我希望确认电子邮件仅发送一次(使用命令),另一方面,我相信可能有多个对新注册用户感兴趣的组件。记录器或SMS发送者。
您将如何实施?