This all seems fine and good. It appears simple enough. We have
TeamMember Aggregate types, and we’ve designed them so that each holds some information about the backing
User from the foreign Bounded Context. But did you realize how much responsibility we’ve just assumed by designing these Aggregates that way?
Recall that in the Collaboration Context the team decided to just create immutable Value Objects that hold similar information (see “Implementing the REST Client Using an Anticorruption Layer”). Because the Values are immutable, the team will never have to worry about keeping the shared information up-to-date. Of course, the downside to that advantage is that if some of the shared information ...