Mit wachsender Fachlichkeit reicht eine technisch saubere Modulstruktur nicht aus. Geschäftsregeln, Zuständigkeiten und Integrationsgrenzen müssen so modelliert werden, dass Änderungen lokal bleiben und fachliche Begriffe im Code eindeutig sind.
Der Kurs entwickelt aus einer zunächst gekoppelten Anwendung eine klar geschnittene Architektur. Domain-driven Design liefert den fachlichen Rahmen, CQRS trennt Änderungs- und Lesemodelle, und Event Sourcing wird nur dort eingesetzt, wo Historie und Rekonstruktion einen messbaren Nutzen besitzen.
Inhaltsübersicht
- Lernziele
- Domänenschnitt und gemeinsame Sprache
- Taktisches Design in NestJS
- CQRS mit Commands, Queries und Events
- Event Sourcing und Projektionen
- Konsistenz, Integration und Architekturtests
- Praxisprojekt: Auftragsdomäne mit Ereignishistorie
- Prüfpunkte und typische Fehler
Lernziele
- Fachdomänen, Subdomänen, Bounded Contexts und Integrationsbeziehungen belastbar schneiden.
- NestJS-Module entlang fachlicher Verantwortlichkeiten statt technischer Schichten strukturieren.
- Aggregates, Value Objects, Domain Services und Repositories mit klaren Invarianten modellieren.
- Commands, Queries und Events mit dem CQRS-Modul konsistent einsetzen.
- Event-Sourcing-Entscheidungen, Event-Schemata, Projektionen und Versionsstrategien bewerten.
- Konsistenz, Idempotenz, Sagas und automatisierte Architekturtests absichern.
Domänenschnitt und gemeinsame Sprache
Die Architektur beginnt mit fachlichen Ereignissen, Entscheidungen und Verantwortlichkeiten. Technische Begriffe werden zurückgestellt, bis Grenzen und Bedeutung zentraler Begriffe geklärt sind.
- Akteure, Geschäftsziele, Entscheidungen und relevante Ereignisse erfassen.
- Begriffe mit mehreren Bedeutungen identifizieren und kontextabhängig präzisieren.
- Zusammengehörige Regeln und Daten zu Kandidaten für Bounded Contexts gruppieren.
- Upstream- und Downstream-Beziehungen sowie notwendige Übersetzungen dokumentieren.
- Schnittstellen nach fachlichen Verträgen statt nach Datenbanktabellen definieren.
- Kontextgrenzen in eine modulare NestJS-Struktur überführen.
Entscheidungskriterien und Hinweise
- Bounded Contexts beschreiben Bedeutungsgrenzen und nicht automatisch Deploymentgrenzen.
- Ein gemeinsamer Begriff darf in verschiedenen Kontexten unterschiedliche Modelle besitzen.
Taktisches Design in NestJS
Das Domänenmodell bleibt unabhängig von Transport, Persistenz und Framework-Details. NestJS übernimmt Komposition und Adapter, während fachliche Regeln in testbaren Objekten liegen.
- Aggregate-Grenzen nach konsistenten Geschäftsregeln und nicht nach Objektgraphen wählen.
- Zustandsänderungen ausschließlich über fachlich benannte Methoden zulassen.
- Value Objects unveränderlich gestalten und Validierung in deren Konstruktion bündeln.
- Domain Services nur für Regeln einsetzen, die keinem einzelnen Aggregate gehören.
- Repository-Verträge an Aggregate und fachliche Suchbedürfnisse ausrichten.
- Ports und Adapter verwenden, um technische Abhängigkeiten aus dem Domänenkern fernzuhalten.
Entscheidungskriterien und Hinweise
- Persistenzmodelle werden nicht ungeprüft als Domänenobjekte verwendet.
- Aggregate bleiben so klein wie möglich und so groß wie für Invarianten erforderlich.
CQRS mit Commands, Queries und Events
CQRS wird schrittweise eingeführt. Zuerst werden Schreibabsichten und Leseabfragen semantisch getrennt; getrennte Modelle oder Speicher folgen nur bei nachgewiesenem Bedarf.
- Anwendungsfälle als Commands mit eindeutiger Absicht und idempotenter Identität formulieren.
- Command Handler als Orchestrierung zwischen Domäne, Repository und Transaktion aufbauen.
- Queries auf konkrete Lesebedürfnisse zuschneiden.
- Domain Events nach erfolgreicher Zustandsänderung kontrolliert veröffentlichen.
- Event Handler nach fachlicher Relevanz und Fehlerauswirkung klassifizieren.
- Sagas für länger laufende Abläufe mit Kompensation und Abbruchbedingungen modellieren.
- Korrelation, Kausalität und Idempotenz über alle Nachrichten dokumentieren.
Entscheidungskriterien und Hinweise
- CQRS verlangt nicht zwingend getrennte Datenbanken oder Microservices.
- Domain Events beschreiben abgeschlossene fachliche Tatsachen.
Event Sourcing und Projektionen
Event Sourcing wird als bewusste Architekturentscheidung behandelt. Auditierbarkeit, zeitliche Rekonstruktion, Komplexität und Betriebsaufwand werden gegeneinander abgewogen.
- Unveränderliche Events mit fachlicher Bedeutung, stabiler Identität und Metadaten entwerfen.
- Optimistische Konkurrenzkontrolle über Stream-Versionen implementieren.
- Aggregate aus Events rekonstruieren und Snapshots nur bei gemessenem Bedarf einsetzen.
- Projektionen idempotent und vollständig neu aufbaubar gestalten.
- Event-Schemaänderungen durch Upcasting, parallele Versionen oder Migrationsläufe behandeln.
- Fehlgeschlagene Projektionen, Poison Events und Wiederanlauf operational einplanen.
- Datenschutzanforderungen und Unveränderlichkeit frühzeitig abwägen.
Entscheidungskriterien und Hinweise
- Projektionen sind abgeleitete Daten und müssen reproduzierbar sein.
- Event Sourcing wird nicht als universelle Persistenzvorgabe verwendet.
Konsistenz, Integration und Architekturtests
An Kontextgrenzen werden zeitliche Verzögerung, Wiederholung und Ausfall als normale Systemzustände behandelt. Architekturtests sichern die beabsichtigten Abhängigkeitsrichtungen.
- Outbox- und Inbox-Muster für atomare Zustandsänderung und verlässliche Veröffentlichung einsetzen.
- Idempotente Handler und deduplizierbare Nachrichtenidentitäten definieren.
- Eventually Consistent Read Models mit sichtbaren Zuständen und Wiederholungsstrategien gestalten.
- Anti-Corruption Layer für fremde Modelle und externe Begriffe verwenden.
- Importregeln zwischen Domain, Application und Infrastructure automatisiert prüfen.
- Contract- und Szenariotests über Kontextgrenzen ergänzen.
Entscheidungskriterien und Hinweise
- Technische Wiederholung darf keine doppelte fachliche Wirkung erzeugen.
- Architekturregeln werden im Build geprüft und nicht nur dokumentiert.
Praxisprojekt: Auftragsdomäne mit Ereignishistorie
Eine monolithische Auftragsanwendung wird in fachliche Kontexte für Auftrag, Bestand und Abrechnung zerlegt. Der Auftragskontext verwendet Commands und Domain Events; ein separates Lesemodell stellt Status und Verlauf bereit.
Für einen ausgewählten Ablauf wird Event Sourcing eingesetzt. Projektionen, konkurrierende Änderungen, Wiederholungen und ein fehlerhafter Event Handler werden gezielt simuliert.
- Domänenereignisse und Begriffe erfassen und daraus drei Bounded Contexts ableiten.
- NestJS-Module, Ports und Adapter entlang der Kontextgrenzen anlegen.
- Auftrags-Aggregate mit Value Objects und Invarianten implementieren.
- Commands, Queries und Domain Events über den CQRS-Bus verbinden.
- Event Stream mit Versionsprüfung speichern und Aggregate rekonstruieren.
- Status- und Verlaufsprojektion aufbauen und einen vollständigen Rebuild durchführen.
- Outbox, Idempotenz und Saga für die Bestandsreservierung ergänzen.
- Architektur-, Unit-, Integrations- und Szenariotests ausführen.
Prüfpunkte und typische Fehler
- Bounded Contexts werden nicht mit technischen Deploymenteinheiten gleichgesetzt.
- Aggregate kontrollieren Invarianten, ohne unnötig große Transaktionen zu erzeugen.
- CQRS wird nur bis zu der für das Problem erforderlichen Stufe ausgebaut.
- Domain Events sind fachlich verständlich und versionsfähig.
- Projektionen sind deterministisch neu aufbaubar und behandeln Duplikate sicher.
- Event Sourcing wird nur dort eingesetzt, wo der Nutzen den zusätzlichen Betriebsaufwand rechtfertigt.
Fachbereichsleitung und Trainerteam
-

Lucas Beich
Telefon: + 49 (221) 74740055
E-Mail: lucas.beich@seminar-experts.de -

Paul Goldschmidt
Telefon: + 49 (221) 74740055
E-Mail: paul.goldschmidt@seminar-experts.de
Seminardetails
| Dauer: | 3 Tage ca. 6 h/Tag, Beginn 1. Tag: 10:00 Uhr, weitere Tage 09:00 Uhr |
| Preis: |
Öffentlich oder Live Stream: € 1.797 zzgl. MwSt. Inhaus: € 5.100 zzgl. MwSt. |
| Teilnehmeranzahl: | min. 2 - max. 8 |
| Teilnehmer: | Erfahrene NestJS- und TypeScript-Entwickler, Softwarearchitekten, technische Projektleitungen und Lead Developer |
| Voraussetzungen: | Sichere NestJS-Praxis, objektorientierte und funktionale Modellierungsgrundlagen, Erfahrung mit Datenbanken und automatisierten Tests |
| Standorte: | Stream Live, Inhaus/Firmenseminar, Berlin, Bremen, Darmstadt, Dresden, Erfurt, Essen, Flensburg, Frankfurt, Freiburg, Friedrichshafen, Hamburg, Hamm, Hannover, Jena, Kassel, Köln, Konstanz, Leipzig, Luxemburg, Magdeburg, Mainz, München, Münster, Nürnberg, Paderborn, Potsdam, Regensburg, Rostock, Stuttgart, Trier, Ulm, Wuppertal, Würzburg |
| Methoden: | Fachvortrag, Live-Coding, Demonstrationen, praktische Übungen und strukturierte Auswertung am System |
| Seminararten: | Öffentlich, Webinar, Inhouse, Workshop - Alle Seminare mit Trainer vor Ort, Webinar nur wenn ausdrücklich gewünscht |
| Durchführungsgarantie: | ja, ab 2 Teilnehmern |
| Sprache: | Deutsch - bei Firmenseminaren ist auch Englisch möglich |
| Seminarunterlage: | Dokumentation auf Datenträger oder als Download |
| Teilnahmezertifikat: | ja, selbstverständlich |
| Verpflegung: | Kalt- / Warmgetränke, Mittagessen (wahlweise vegetarisch) |
| Support: | 3 Anrufe im Seminarpreis enthalten |
| Barrierefreier Zugang: | an den meisten Standorten verfügbar |
| Weitere Informationen unter + 49 (221) 74740055 |
Seminartermine
Die Ergebnissliste kann durch Anklicken der Überschrift neu sortiert werden.
