How to handle set based consistency validation in CQRS?

Posted by JD Courtoy on Stack Overflow See other posts from Stack Overflow or by JD Courtoy
Published on 2010-05-26T21:18:14Z Indexed on 2010/05/26 21:21 UTC
Read the original article Hit count: 226

I have a fairly simple domain model involving a list of Facility aggregate roots. Given that I'm using CQRS and an event-bus to handle events raised from the domain, how could you handle validation on sets? For example, say I have the following requirement:

  1. Facility's must have a unique name.

Since I'm using an eventually consistent database on the query side, the data in it is not guaranteed to be accurate at the time the event processesor processes the event.

For example, a FacilityCreatedEvent is in the query database event processing queue waiting to be processed and written into the database. A new CreateFacilityCommand is sent to the domain to be processed. The domain services query the read database to see if there are any other Facility's registered already with that name, but returns false because the CreateNewFacilityEvent has not yet been processed and written to the store. The new CreateFacilityCommand will now succeed and throw up another FacilityCreatedEvent which would blow up when the event processor tries to write it into the database and finds that another Facility already exists with that name.

© Stack Overflow or respective owner

Related posts about validation

Related posts about ddd