CQRS staat voor Command Query Responsibility Segregation. Het is een software architectuurpatroon dat de verantwoordelijkheden voor het verwerken van opdrachten, ook wel commando’s of - in het Engels - commands genoemd, en het ophalen van gegevens, zogenaamde ‘queries’, projecties of views, van elkaar scheidt. Dit betekent dat er (tenminste) twee aparte modellen worden gebruikt: een command-model voor het verwerken en opslaan van wijzigingen in de state en een query-model, ook read-model, view-model of projecties genoemd, voor het ophalen van gegevens zonder deze te veranderen.

Het voordeel van CQRS is dat het de applicatie schaalbaarder en flexibeler kan maken, omdat elk model specifiek kan worden geoptimaliseerd voor zijn taak. Dit patroon wordt vaak gebruikt in combinatie met Event Sourcing, waarbij alle veranderingen in de applicatiestatus worden opgeslagen als een reeks events (gebeurtenissen). CQRS is populair in omgevingen met hoge prestatie-eisen en complexe datamodellen, zoals bij microservices en gedistribueerde systemen.

In Domain Driven Design (DDD) ligt de nadruk op het goed ontwerpen van de business domeinen en bijbehorende systemen en de scheiding tussen schrijven en lezen ondersteunt daar sterk in.

Referenties

Voor meer informatie over CQRS (en Event Sourcing) en hoe het werkt, zijn er verschillende bronnen die je kunt raadplegen:

  1. AxonIQ Docs: AxonIQ is het bedrijf achter het Axon Framework; een Java framework om Event Sourcing systemen te bouwen. Lees bijvoorbeeld:

  2. Greg Young’s CQRS: Greg Young, een van de grondleggers van CQRS, heeft verschillende artikelen, video’s en presentaties over het onderwerp. Zijn uitleg gaat vaak diep in op de filosofie achter het patroon:

    • Zoek op “Greg Young CQRS” op YouTube voor video’s en presentaties.
  3. Marc Explains: Marc van Andel heeft een serie video’s gemaakt om de verschillende aspecten van CQRS en Event Sourcing toe te lichten:

  4. Microsoft Docs (CQRS): Microsoft heeft gedetailleerde documentatie over CQRS en Event Sourcing. Ze bespreken het patroon, voordelen, nadelen en implementatiedetails:

  5. Martin Fowler’s Blog: Martin Fowler, een gerenommeerde softwarearchitect, is een autoriteit wat betreft patronen en concepten. We kunnen daarom deze verwijzing niet weglaten:

  6. Books: Er zijn enkele boeken die CQRS en Event Sourcing behandelen in bredere contexten van gedistribueerde systemen en microservices. Een paar aanbevolen boeken zijn:

    • “Patterns, Principles, and Practices of Domain-Driven Design” door Scott Millett en Nick Tune
    • “Implementing Domain-Driven Design” door Vaughn Vernon
  7. Community Resources & GitHub: Op GitHub kun je ook voorbeeldprojecten vinden die CQRS en Event Sourcing implementeren in verschillende talen (bijv. Java, C#, Node.js).

Deze bronnen kunnen je een diepgaand begrip geven en je helpen met praktijkvoorbeelden en best practices om CQRS in jouw projecten toe te passen.