How should separate aggregate roots communicate with one another in an environment built on DDD principles using an event-sourced aggregate back-end?
For instance, I have a Facility
aggregate root (AR) which has a factory method responsible for creating a Booking
AR. The Booking
is a time-sensitive combination of a Person
AR and a Facility
AR. A Person
can only be booked in a single Facility
.
In DDD, I would have held references to the Booking
in Person
, and Person
in Facility
. However, when generating events for use in event-sourcing I think that trying to handle the event deserialization from the back-end would become prohibitive. Therefore, I've taken to only holding references to the value object-based unique id's. This brings up a new problem, however, when a method on an AR needs to call another method on another AR--how do you handle that situation? Hit the event source repository from the domain AR?
What is the general use case in this scenario? Am I approaching this all wrong?