如何在CQRS中处理集合一致性验证? - 代码日志

如何在CQRS中处理集合一致性验证?

我有一个相当简单的域模型,涉及到一个设施聚合根列表。鉴于我使用CQRS和事件总线来处理从域引发的事件,您如何处理集合的验证?例如说我有以下要求:

设施必须有一个独特的名称。

由于我在查询方面使用最终一致的数据库,因此在事件处理程序处理事件时,数据不能保证是准确的。

例如,FacilityCreatedEvent在查询数据库事件处理队列中等待处理并写入数据库。一个新的CreateFacilityCommand被发送到要处理的域。域服务查询读数据库以查看是否有任何其他设施已注册该名称,但由于CreateNewFacilityEvent尚未被处理并写入商店而返回false。新的CreateFacilityCommand现在将成功并抛出另一个FacilityCreatedEvent,当事件处理器尝试将其写入数据库时​​,会发现另一个FacilityCreatedEvent,并发现另一个Facility已经存在该名称。

我去的解决方案是添加一个系统聚合根,可以保留当前设施名称的列表。创建新工具时,我使用系统集合(只有一个系统作为全局对象/单例)作为工厂。如果给定的设施名称已经存在,那么它将抛出验证错误。

这将在域内保留验证约束,并且不依赖于最终一致的查询存储。

http://stackoverflow.com/questions/2916899/how-to-handle-set-based-consistency-validation-in-cqrs

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何在CQRS中处理集合一致性验证?