CQRS (Command Query Responsibility Separation) is a big topic. CQRS is not accepted by everyone: maybe complete implementations have added implementation complexity, and you have to know when to use it or not. You have CQRS with and without DDD (Domain-Driven Design) and with and without Event Sourcing.
In this post I included links with videos, podcasts, Infoq presentations about CQRS. More links are coming!
Command-query separation (CQRS)
CQRS an architectural pattern for separation of reads from writes where the former is a Query and the latter is a Command. Commands mutate state and are hence approximately equivalent to method invocation on your aggregate roots/entities and Queries query state, but do not mutate it. CQRS is a derivative architectural pattern from the design pattern called Command and Query Separation (CQS) which was coined by Meyer. While CQRS does not require DDD, domain driven design makes the distinction between commands and queries, explicit, around the concept of an aggregate root. The idea is that a given aggregate root has a method that corresponds to a command and a command handler invokes the method on the aggregate root. The aggregate root is responsible for performing the logic of the operation and yielding either a number of events or a failure (exception or execution result enumeration/number) response OR (if ES is not used) just mutating its state for a persister implementation such as an ORM to write to a data store, while the command handler is responsible for pulling in infrastructure concerns related to the saving of the aggregate root’s state or events and creating the needed contexts (e.g. transactions).
Jonathan Oliver on Event Sourcing and EventStore @ E-VAN 25 October 2011
CQRS and Event Sourcing with NCQRS
CQRS, race conditions, and sagas – oh my!
CQRS, not just for server systems
CQRS is of great use for building things other than server side systems as most people tend to use it for. In this talk, Greg Young will look at the use of CQRS in other kinds of systems and how it can greatly decrease complexity while providing value to users of the system.
Simple is better
Very often we take on huge couplings in order to get value. This coupling forces us to build software in certain ways that may or may not be good for us at the time. In this talk, Greg Young looks at some common real world examples of these problems — and, more importantly, how to avoid them
CQRS, CQS y Event Messaging
Abstraction Demo Videos
Unleash your Domain
Command Query Responsibility Segregation
London .NET User Group:Command Query Responsibility Segregation
NServiceBus Architectural Principles
Erik Rozendaal of Holland talking about CQRS and Event Sourcing
CQRS, DDD, Cloud computing and much more!
Command-Query Responsibility Segregation
Recording of Mark Nijhof on CQRS @ E-VAN 18 November 2009
Mark Nijhof on CQRS Sample @ E-VAN 18 November 2009
A Discussion with Allard Buijze on CQRS with the Axon framework
CQRS and Friends: possibly distributed systems, intentionally.
Angel “Java” Lopez