Command-Query-Responsibility-Segregation

Funktionsprinzip von CQRS mit Event Sourcing

Die Command Query Responsibility Segregation (CQRS, [kə'mæ:nd 'kwɪ(ə)ri: ri,spɑnsə'bɪləti ,sɛgrɪ'geiʃ(ə)n] bzw. [si: kju: ɑ:r ɛs], englisch für etwa „Kommando-Abfrage-Zuständigkeitstrennung“) ist ein Entwurfsmuster für Datenbank-Abfragen, welches durch Greg Young definiert wurde.

Das CQRS-Pattern propagiert eine Aufteilung des Objektmodells in zwei Objektmodelle hinsichtlich der Zugriffe auf die Datenbank:

Im Gegensatz zu einer CRUD-Sicht für die Zugriffe auf eine Datenbank – wo also ein gemeinsames Objekt für Queries genauso wie für Lesen, Schreiben und Löschen verantwortlich ist – gibt es bei CQRS zwei Objekte: Befehle zum Schreiben (Ändern und Löschen), sowie Abfragen zum Lesen. CQRS wird oft im Zusammenhang mit Event Sourcing, Serviceorientierten Architekturen, etwa im Cloud Computing erwähnt, diese Architekturen können aber genauso gut auch mit CRUD kombiniert werden.

Vorteile gegenüber CRUD

Nachteile gegenüber CRUD

Frameworks

Die folgenden Frameworks unterstützen bei der Umsetzung dieses Patterns:

.NET
EventFlow
Java
OpenCQRS
JavaScript
wolkenkit
PHP
prooph
Python
eventsourcing

Literatur

Quellen

  1. ↑ Martin Fowler: CQRS. 14. Juli 2011, abgerufen am 18. Mai 2014 (englisch).
  2. ↑ Greg Young: CQRS Documents by Greg Young. (PDF) In: WordPress. November 2010, abgerufen am 13. Juli 2014 (englisch).
  3. ↑ Archivierte Kopie (Memento des Originals vom 28. August 2020 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
  4. ↑ EventFlow. In: GitHub. Abgerufen am 16. Juli 2025 (englisch, CQRS- und EventSourcing-Framework für .NET Core).
  5. ↑ OpenCQRS. Abgerufen am 11. August 2025 (englisch, CQRS- und Event-Sourcing-Framework für die JVM).
  6. ↑ wolkenkit. Abgerufen am 27. Juni 2017 (englisch, CQRS-, DDD- und Event-Sourcing-Framework für JavaScript).
  7. ↑ prooph. Abgerufen am 16. Juli 2025 (englisch, CQRS and EventSourcing Infrastructure for PHP).
  8. ↑ eventsourcing. Abgerufen am 16. Juli 2025 (englisch, Python-Bibliothek zur Implementierung von Event-Sourcing, inklusive CQRS, mit Erweiterungsprojekten z.B. für Django, SQLAlchemy, Axon Server, KurrentDB oder gRPC).