所以我一直在阅读有关EventStore和NServiceBus的内容,我喜欢使用我的数据的事务日志来帮助我根据这些数据构建视图。
我现在不明白的是如何区分将写入您的读取存储的事件和可能触发电子邮件发送的同一事件。
离。创建客户
CreateUserCommand -> CreateUserCommandHandler -> CreatedUserEvent
我是否应该使用CreatedUserEvent来触发我对数据存储的写入并向用户发送电子邮件?
答案 0 :(得分:1)
在过去的几年里,Eric Evans已经认识到他的DDD模式的更新:域事件(又称外部事件概念)。
事件采购模式中的内部事件是我们一直关注的内容,例如您示例中的UserCreatedEvent。使用IEvent标记接口明确表示这些。
虽然在总线上发布了IEvent,但IDomainEvents更容易出现更大的外部到域通知,这些通知不会影响每个人的聚合状态。
因此...
CreateUser (ICommand)
^- CreateUserCommandHandler
UserCreated (IEvent)
^- UserCreatedEventHandler
SendNewUserEmail (ICommand)
^- SendNewUserEmailCommandHandler
NewUserEmailSent (IDomainEvent)
^- UserRegistrationService or some other AC
我自己也很喜欢采购活动;但是,我猜你可以在总线上使用UserRegistrationService
注册来监听SendNewUserEmail ICommand。
无论你走到哪里,我都会集中精力创建额外的命令/事件来发送电子邮件并发送电子邮件。然后,稍后您可以查看事务日志,了解排队等待发送的时间,发送时间,发送时是否有重试,同时发送了多少,并影响了时间延迟(datetime diffs) )显示任何瓶颈?,安装一个发送电子邮件的队列,并将其分解成一个较小的独立服务等等。