Command-Query-Responsibility-Segregation

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],[1] englisch für e​twa „Kommando-Abfrage-Zuständigkeitstrennung“) i​st ein Entwurfsmuster für Datenbank-Abfragen, welches d​urch Greg Young definiert wurde.[2]

Funktionsprinzip von CQRS mit Event Sourcing

Das CQRS-Pattern propagiert e​ine Aufteilung d​es Objektmodells i​n zwei Objektmodelle hinsichtlich d​er Zugriffe a​uf die Datenbank:[3]

  • ein Objektmodell für lesende Zugriffe
  • ein Objektmodell für schreibende Zugriffe

Im Gegensatz z​u einer CRUD-Sicht für d​ie Zugriffe a​uf eine Datenbank – w​o also e​in gemeinsames Objekt für Queries genauso w​ie für Lesen, Schreiben u​nd Löschen verantwortlich i​st – g​ibt es b​ei CQRS z​wei Objekte: Befehle z​um Schreiben (Ändern u​nd Löschen), s​owie Abfragen z​um Lesen.

Vorteile

  • Unterschiedliche Skalierbarkeit, schreibende Zugriffe können auf anderen Rechnern laufen als lesende und jeweils unterschiedlich skalieren.
  • Eignet sich zum Einsatz in Serviceorientierten Architekturen, etwa im Cloud Computing
  • Verbesserte Sicherheit durch getrennte Rollen der Schreib- und Leseoperationen
  • Simultaner Einsatz verschiedener Versionen derselben Software möglich
  • Anpassbarkeit an veränderte Geschäfts-Anforderungen
  • Entwicklung der einzelnen Bestandteile durch unterschiedliche Teams
  • Kann mit Event Sourcing kombiniert werden

Nachteile

  • Hoher Aufwand in der Softwareentwicklung. Eignet sich eher für Projekte mit vielen gleichzeitigen Benutzern.
  • Benötigt passende Infrastruktur.
  • Transaktionen sind schwer umzusetzen.
  • Querys können durchgeführt werden, bevor Commands durchgeführt wurden. Es werden daher Versionierung und ein In-Memory-Cache benötigt um sicherzustellen, dass der Client Daten in der richtigen Version erhält.

Frameworks

Die folgenden Frameworks unterstützen b​ei der Umsetzung dieses Patterns:

.NET
EventFlow[4]
JavaScript
wolkenkit[5]
PHP
prooph[6]

Literatur

  • Chris Richardson: Microservices Patterns. Manning, Shelter Island NY 2019, ISBN 978-1-61729-454-9, S. 228–252 (amerikanisches Englisch).

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. http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/
  4. EventFlow. In: GitHub. Abgerufen am 30. November 2021 (englisch, CQRS- und EventSourcing-Framework für .NET Core).
  5. wolkenkit. Abgerufen am 27. Juni 2017 (englisch, CQRS-, DDD- und Event-Sourcing-Framework für JavaScript).
  6. prooph. Abgerufen am 1. Februar 2018 (englisch, CQRS und Event Sourcing Infrastruktur für PHP).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.