Top-Fragen
Zeitleiste
Chat
Kontext

Command-Query-Responsibility-Segregation

Trennung der Zuständigkeit von Objekten bei Datenbankabfragen Aus Wikipedia, der freien Enzyklopädie

Command-Query-Responsibility-Segregation
Remove ads

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]

Thumb
Funktionsprinzip von CQRS mit Event Sourcing

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. 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.

Remove ads

Vorteile gegenüber CRUD

  • Unterschiedliche Skalierbarkeit, schreibende Zugriffe können auf anderen Rechnern laufen als lesende und jeweils unterschiedlich skalieren.
  • 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
Remove ads

Nachteile gegenüber CRUD

  • 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).
Remove ads

Quellen

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads