Following are few use cases where this pattern will be a right fit:
- Collaborative data and complex business rules: CQRS allows you to define commands with a sufficient granularity to minimize merge conflicts at the domain level. You can alter commands or queries independently of each other because their models are separate.
- High performance reads and writes that can be tuned: Scenarios where performance of data reads must be fine-tuned separately from performance of data writes, especially when the read/write ratio is very high, and when horizontal scaling is required.
- Simplify business logic: CQRS can be very helpful when you have difficult business logic. CQRS forces you to not mix domain logic and infrastructural operations.
- Integration with other systems: Especially in combination with Event Sourcing, where the temporal failure of one subsystem should not affect the availability of the others.