Jon*_*yMC 24 domain-driven-design cqrs
我们正在尝试CQRS.我们有一个验证情况,其中CustomerService(域服务)需要知道客户是否存在.客户的电子邮件地址是唯一的.我们的客户存储库(通用存储库)仅具有Get(id)和Add(customer).CustomerService应该如何确定客户是否存在?
Kev*_*ber 26
看一下这篇博客文章:CQRS架构中基于集合的验证.
它解决了这个问题.在CQRS中处理这是一个复杂的问题.Bjarte建议的是查询报告数据库中的现有客户电子邮件地址,并CustomerEmailAddressIsNotUniqueCompensatingCommand
在找到电子邮件地址时向域模型发出补偿命令(例如).然后,您可以启动适当的事件,其中可能包括UndoCustomerCreationEvent
.
阅读上述博客文章中的评论,了解其他想法.
Adam D.在评论中建议验证是一个域名关注点.因此,您可以将ReservedEmailAddresses存储在便于客户创建的服务中,并通过事件存储中的事件进行补充.
我不确定是否能够轻松解决这个问题,感觉非常干净.让我知道你想出了什么!
祝好运!
这个问题不一定非常复杂:
使用数据库可以获得有用的功能,并且不要对ORM限制感到困惑.
Udi Dahan的这篇文章http://www.udidahan.com/2009/12/09/clarified-cqrs/包含以下段落:
"此外,我们不需要访问查询存储来处理命令 - 任何需要的状态都应该由自治组件管理 - 这是自治意义的一部分."
我相信Udi建议简单地向数据库添加一个唯一约束.
但是如果你不想这样做,基于上面的陈述,我建议只是将"ByEmail"方法添加到存储库并完成它 - 但是再次Udi可能会有更好的建议..