User Tools

Site Tools


technology:cqrs

This is an old revision of the document!


Table of Contents

CQRS

Command and Query Responsibility Segregation ist ein Konzept das auf CQS1) von Bertrand Mayer2) basiert, und von Greg Young entwickelt wurde. CQS trennt die Aufgaben eines Objektes in zweierlei. Entweder setzt eine Methode eines Objektes einen Befehl um, oder sie beantwortet eine Frage. Wenn sie einen Befehl umsetzt hat die Methode keinen Rückgabewert. Wenn sie eine Frage beantwortet bleibt das Objekt unverändert, so dass die Antwort auf die Frage 3) immer dieselbe bleibt.

CQRS geht einen Schritt weiter indem es die Aufgaben auf zwei Objekte aufteilt. Ein Objekt führt Befehle aus, das andere beantwortet Fragen. So kann jedes Objekt für die eigenen Aufgaben optimiert werden.

Implementierung

Command


Um eine Aktion in der Domäne durchzuführen werden folgende Schritte durchgeführt

  • UI baut einen Command
  • UI schickt diesen Command an die Remote Facade
  • die Remote Facade ruft in der Applikationsschicht den entsprechenden Command Handler auf
  • der Command Handler sammelt alle notwendigen Informationen um den Befehl durchzuführen, führt eigene Prüfungen durch4), lädt das Aggregate über das dafür vorgesehene Repository und ruft die entsprechende Methode in dem Aggregate auf, wobei alle notwendigen Daten dafür mit übergeben werden
  • Das Aggregate prüft alle Invariants und führt die Methode dann durch indem es Domain Events veröffentlicht
  • Der Command Handler speichert das geänderte Aggregate zurück über das Repository5)
3) und alle anderen
4) so wenig wie möglich, die Logik soll in der Domäne bleiben
5) welches die veröffentlichten Domain Events aus dem Aggregate abfragt und speichert
technology/cqrs.1349345501.txt.gz · Last modified: 2012/10/04 12:11 by rtavassoli