Sometimes it is actually good practice to modify multiple aggregates within a transaction. But it’s
important to understand why the guidelines exist in the first place so that you can be aware of the
consequences of ignoring them.
When the cost of eventual consistency is too high, it’s acceptable to consider modifying two objects
in the same transaction. Exceptional circumstances will usually be when the business tells you that
the customer experience will be too unsatisfactory. You shouldn’t just accept the business’s decision,
though; it never wants to accept eventual consistency. You should elaborate on the scalability,
performance, and other costs involved when not using eventual consistency so that the business can
make an informed, customer‐focused decision.
Another time it’s acceptable to avoid eventual consistency is when the complexity is too
great. You will see later in this chapter that robust eventually consistent implementations
often utilize asynchronous, out‐of‐process workflows that add more complexity and
dependencies.
To summarize, saving one aggregate per transaction is the default approach. But you should
collaborate with the business, assess the technical complexity of each use case, and consciously ignore
the guideline if there is a worthwhile advantage, such as a better user experience.
Try not to confuse this guideline with loading or creating aggregates. It
is perfectly fine to load multiple aggregates inside the same transaction as long as
you save only one of them. Equally, it is permissible to create multiple aggregates
inside a single transaction because adding new aggregates should not cause
concurrency issues.
Nick Tune "Patterns, Principles, and Practices of Domain-Driven Design"