In "Domain Driven Design: Tackling Complexity in the Heart of Software", Evans defines
An Aggregate is a cluster of associated objects that we treat as a unit for the purpose of data changes.
Obviously this implies that an aggregate must be updated in a single transaction.
However, must a transaction only update a single aggregate? If so, why?
My Research
I ask because, in "Implementing Domain Driven Design", page 360, Vernon writes:
Both the referencing aggregate and the referenced aggregate must not be modified in the same transaction. Only one or the other may be modified in a single transaction.
but does not give a reason for this rule.
I understand that if business rules require a single transaction, this indicates a hidden invariant, which would require the entities to be part of the same aggregate. But what if the business does not care, and developers simply find it convenient?
On page 437, Vernon also writes:
Be careful not to overuse the ability to commit modifications to multiple aggregates in a single transaction just because it works in a unit test environment. If you aren't careful, what works well in development and test can fail severely in production because of concurrency issues.
Which concurrency issues are those?