Zum Inhalt springen

„Command-Query-Responsibility-Segregation“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
InternetArchiveBot hat 1 Archivlink(s) ergänzt und 0 Link(s) als defekt/tot markiert.) #IABot (v2.0.9.5
Zeile 3: Zeile 3:
Die '''{{lang|en|Command Query Responsibility Segregation}}''' ('''CQRS''', [{{IPA|kə'mæ:nd 'kwɪ(ə)ri: ri,spɑnsə'bɪləti ,sɛgrɪ'geiʃ(ə)n}}] bzw. [{{IPA|si: kju: ɑ:r ɛs}}],<ref>{{Internetquelle|url=http://martinfowler.com/bliki/CQRS.html|titel=CQRS|autor=Martin Fowler|datum=2011-07-14|sprache=en|zugriff=2014-05-18}}</ref> {{enS}} für etwa „Kommando-Abfrage-Zuständigkeitstrennung“) ist ein [[Entwurfsmuster]] für Datenbank-Abfragen, welches durch [[Greg Young]] definiert wurde.<ref>{{Internetquelle|autor=Greg Young|titel=CQRS Documents by Greg Young|format=PDF|datum=2010-11|werk=WordPress|url=http://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf|zugriff=2014-07-13|sprache=en}}</ref>
Die '''{{lang|en|Command Query Responsibility Segregation}}''' ('''CQRS''', [{{IPA|kə'mæ:nd 'kwɪ(ə)ri: ri,spɑnsə'bɪləti ,sɛgrɪ'geiʃ(ə)n}}] bzw. [{{IPA|si: kju: ɑ:r ɛs}}],<ref>{{Internetquelle|url=http://martinfowler.com/bliki/CQRS.html|titel=CQRS|autor=Martin Fowler|datum=2011-07-14|sprache=en|zugriff=2014-05-18}}</ref> {{enS}} für etwa „Kommando-Abfrage-Zuständigkeitstrennung“) ist ein [[Entwurfsmuster]] für Datenbank-Abfragen, welches durch [[Greg Young]] definiert wurde.<ref>{{Internetquelle|autor=Greg Young|titel=CQRS Documents by Greg Young|format=PDF|datum=2010-11|werk=WordPress|url=http://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf|zugriff=2014-07-13|sprache=en}}</ref>


Das CQRS-Pattern propagiert eine Aufteilung des Objektmodells in zwei Objektmodelle hinsichtlich der Zugriffe auf die Datenbank:<ref>http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/</ref>
Das CQRS-Pattern propagiert eine Aufteilung des Objektmodells in zwei Objektmodelle hinsichtlich der Zugriffe auf die Datenbank:<ref>{{Webarchiv|url=http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/ |wayback=20200828042742 |text=Archivierte Kopie |archiv-bot=2023-12-06 20:54:24 InternetArchiveBot }}</ref>
* ein Objektmodell für lesende Zugriffe
* ein Objektmodell für lesende Zugriffe
* ein Objektmodell für schreibende Zugriffe
* ein Objektmodell für schreibende Zugriffe

Version vom 6. Dezember 2023, 22:54 Uhr

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],[1] englisch für etwa „Kommando-Abfrage-Zuständigkeitstrennung“) ist ein Entwurfsmuster für Datenbank-Abfragen, welches durch Greg Young definiert wurde.[2]

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

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

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.

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 bei 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. 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.@1@2Vorlage:Webachiv/IABot/codebetter.com
  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).