FAQ - frequently asked questions

How can I ensure that only specific users can execute commands?

You should implement a decorator for the ICommandBus that does the authentication. Have a look at the decorator documentation to see how this can be achieved.

Why isn’t there a “global sequence number” on domain events?

While this is easy to support in some event stores like MSSQL, it doesn’t really make sense from a domain perspective. Greg Young also has this to say on the subject:

Order is only assured per a handler within an aggregate root boundary. There is no assurance of order between handlers or between aggregates. Trying to provide those things leads to the dark side. > Greg Young

Why doesn’t EventFlow have a unit of work concept?

Short answer, you shouldn’t need it. But Mike has a way better answer:

In the Domain, everything flows in one direction: forward. When something bad happens, a correction is applied. The Domain doesn’t care about the database and UoW is very coupled to the db. In my opinion, it’s a pattern which is usable only with data access objects, and in probably 99% of the cases you won’t be needing it. As with the Singleton, there are better ways but everything depends on proper domain design. > Mike Mogosanu

If your case falls within the 1% case, write a decorator for the ICommandBus that starts a transaction, use MSSQL as event store and make sure your read models are stored in MSSQL as well.

Why are subscribers receiving events out of order?

It might be that your aggregates are emitting multiple events. Read about subscribers and out of order events.