at the moment, I am learning Event Sourcing. I used CRUD for a long time now and I guess I'm still kinda stuck in the CRUD-way.
Well, now to my question:
I event-sourced a part of my application, where I create something called a Job
. A Job
can have:
title
description
created_at
So creating this Job
is easy - but what do I do when it comes to updating?
Is it an anti pattern to dispatch an event like JobUpdated
, which contains changes to the title
and possibly the description
? Or should I dispatch multiple events like:
JobTitleChanged
JobDescriptionChanged
In this particular case, where Updated
events seem to be the best you can do, a lot will come down to whether it's more common for one of title or description to be edited or for them to be edited together. If the former, specific field updates (e.g. JobTitleUpdated
) are better, as they at least allow for consumers which don't care about the title field to easily ignore those events, but if a particular transaction issues both JobTitleUpdated
and a JobDescriptionUpdated
events, the context that those events were in the same transaction is difficult to reliably reconstruct from the separate events.
In general, Updated
events aren't particularly rich: they capture what changed, but lose other context (most often the why). In a hotel, for instance, you could have a RoomStatusUpdated
event (e.g. RoomStatusUpdated(VacantDirty)
), but there are a lot of different reasons for that, so it might be better to have GuestCheckedIn
, GuestCheckedOut
, RoomCleaned
, RoomOutOfOrder
etc. events.