To implement command processing we need the following pieces:
- Commands which request that something should happen, i.e. some state change
- Events which indicate that something has happened
- Aggregates that handles Commands and generates Events based on the current state
- Event store which stores all events that has happened
- Application services that receives Commands and routes it to the appropriate aggregate