CQRS-Konzepte
Trennen Sie Commands und Queries für mehr Klarheit.
CQRS-Konzepte ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist CQRS?
CQRS steht für Command Query Responsibility Segregation. Die Idee ist einfach: Trennen Sie den Code, der den Zustand ändert (Befehle), von dem Code, der den Zustand liest (Abfragen).
// Commands : change state, return little or nothing
// Queries : return data, change nothingBefehle
Ein Befehl drückt die Absicht aus, das System zu ändern – etwa eine Bestellung zu erstellen oder ein Abonnement zu kündigen. Er wird im Imperativ benannt und gibt normalerweise nur eine ID oder nichts zurück.
public record CreateOrderCommand(int CustomerId, string[] Items);
public record CancelOrderCommand(int OrderId);Abfragen
Eine Abfrage fordert Daten ohne Seiteneffekte an. Sie wird nach den Daten benannt, die sie zurückgibt, und enthält alle Filterparameter.
public record GetOrderByIdQuery(int OrderId);
public record ListOrdersQuery(int CustomerId, int Page);Warum sie trennen?
Lese- und Schreibvorgänge haben unterschiedliche Anforderungen:
- Lesevorgänge sollen schnell, denormalisiert und cache-freundlich sein.
- Schreibvorgänge benötigen Validierung, Geschäftsregeln und Konsistenz.
Durch die Trennung können sich beide Seiten unabhängig voneinander weiterentwickeln und skalieren.
// Read side -> optimized projections / DTOs
// Write side -> domain rules / transactionsDas Handler-Muster
Jeder Befehl und jede Abfrage wird von einem eigenen Handler verarbeitet. Eine Nachricht, ein Handler, eine Verantwortung – dadurch bleiben Klassen klein und fokussiert.
// CreateOrderCommand -> CreateOrderHandler
// GetOrderByIdQuery -> GetOrderByIdHandlerSchlanke Controller
Mit CQRS werden Controller schlank. Sie erstellen eine Nachricht und leiten sie weiter; die gesamte Logik befindet sich im Handler. Dadurch entfallen überladene Controller und die Testbarkeit verbessert sich.
[HttpPost]
public async Task<IActionResult> Create(CreateOrderCommand cmd)
{
var id = await _sender.Send(cmd);
return CreatedAtAction(nameof(Get), new { id }, null);
}CQRS ist nicht Event Sourcing
Eine häufige Verwechslung: CQRS bezeichnet lediglich die Trennung von Lese- und Schreibvorgängen. Event Sourcing (das Speichern des Zustands als Ereignisprotokoll) ist ein separates Muster, das gut mit CQRS kombiniert werden kann, aber nicht erforderlich ist.
// You can do CQRS with a plain single database.Eine oder getrennte Datenbanken
Beim einfachen CQRS wird eine Datenbank für beide Seiten verwendet. Bei fortgeschrittenen Architekturen werden getrennte Lese- und Schreibspeicher verwendet und synchron gehalten; für die Skalierbarkeit wird dabei letztliche Konsistenz in Kauf genommen. Beginnen Sie einfach.
// Level 1: one DB, separate handlers (most apps)
// Level 2: separate read/write models
// Level 3: separate read/write databasesVorteile
CQRS bietet Ihnen:
- Klare Handler mit jeweils einer Aufgabe.
- Einfacheres Testen – jeder Handler wird isoliert getestet.
- Einen natürlichen Ort für übergreifende Belange (Validierung, Protokollierung).
- Unabhängige Skalierung von Lese- und Schreibvorgängen.
// One class per use case = easy to find and testKosten
CQRS führt zu mehr Klassen und Indirektion. Für eine einfache CRUD-App kann das übertrieben sein. Setzen Sie es dort ein, wo die Geschäftslogik umfangreich oder die Domäne komplex ist.
// Trade-off: clarity & scale vs. boilerplateMediatR kommt ins Spiel
Die Bibliothek MediatR implementiert das In-Process-Mediator-Muster, das jede Nachricht an ihren Handler weiterleitet, sodass Sie diese nicht manuell verdrahten müssen. Im restlichen Kurs wird sie verwendet.
dotnet add package MediatRKurztest
Bestätigen Sie den grundlegenden Unterschied.
Zusammenfassung
Sie haben die CQRS-Konzepte gelernt:
- Trennen Sie Befehle (Zustandsänderungen) von Abfragen (Lesevorgängen).
- Jede Nachricht hat einen fokussierten Handler, wodurch Controller schlank bleiben.
- CQRS ist unabhängig von Event Sourcing und kann eine einzelne Datenbank verwenden.
- MediatR leitet Nachrichten an Handler weiter.
Als Nächstes: Befehle und Handler mit MediatR.
Häufig gestellte Fragen
Ist die Lektion „CQRS-Konzepte“ kostenlos?
Ja — der vollständige Text von „CQRS-Konzepte“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „CQRS-Konzepte“?
Trennen Sie Commands und Queries für mehr Klarheit. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „CQRS-Konzepte“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.