Command and Query Responsibility Segregation CQRS is simply the creation of two objects where there was previously only one. The separation occurs based upon whether the methods are a command or a query.
Advantages Performance and Scalability Separation of Concerns Reduced Complexity of Domain Ability to Parallelize Development Highly Decoupled Increased Testability Easier to Adapt to Change
Disadvantages Increased Complexity of Architecture Learning Curve for Developers Fear of Change
When Not To Use CQRS (In This Way) Lack of Requirements No Domain to Work With If the Benefit isn’t Worth It When it’s not Useful On a System as a Whole Not Just for Scalability Legacy Systems