我有一个相当简单的域模型,涉及Facility
聚合根列表。鉴于我使用 CQRS 和事件总线来处理从域引发的事件,您如何处理集合验证?例如,假设我有以下要求:
Facility
's 必须有一个唯一的名称。
由于我在查询端使用最终一致的数据库,因此不能保证其中的数据在事件处理器处理事件时是准确的。
例如,aFacilityCreatedEvent
在查询数据库事件处理队列中等待处理并写入数据库。一个新CreateFacilityCommand
的被发送到要处理的域。域服务查询读取数据库以查看是否有任何其他Facility
' 已使用该名称注册,但返回 false 因为CreateNewFacilityEvent
尚未处理并写入存储。newCreateFacilityCommand
现在将成功并抛出另一个FacilityCreatedEvent
,当事件处理器尝试将其写入数据库并发现另一个Facility
已使用该名称存在时,它会爆炸。