apply() distinguishes between aggregate eventhandlers and outer eventhandlers.

Given a command, It seems that all events of this command are firstly executed in the aggregat and later on all outer event handler.
Is this a desirable property?
I believed that each apply() is executed on all eventhandlers first and then the next apply() is executed, which is intuitively more correct.


Event handlers outside the aggregate receive the events once the unit of work is committed. This is desirable since it’s entirely possible that the transaction fails for one reason or the other (concurrency issue, conflict, database problems, etc.).

In the CQRS model, the transactional frontier is the aggregate. Until the transaction is effectively committed, it would be a cardinal sin to expose events outside of the aggregate.