During last such procedure, I have identified the following building blocks for CQRS app.
CQRS application consists of at least several independently running processes,
- a process for making action on business domain
- a reaction to that action through backend workflow process (hosting sagas or process managers)
- a separate process for building a read model
You want to be able to easily host those independent functionalities in one or more processes, configure them to work cooperatively, and do this in response to business needs - there are different clients, many bounded contexts, many environments, many infrastructure variations
So the pain I was feeling is how to effectively bootstrap a process and explain it how to cooperate with other processes in a big picture.
At this stage I identified four groups for functional units I call features or modules.
Those groups are: