Virtuelles Meetup – Pragmatic Event-Driven Systems with DDD, CQRS, and Event Sourcing using Axon

03. November 2021

Der wohl wichtigste Schritt bei der Anwendung von DDD ist die Identifizierung von «Bounded Contexts» und deren Beziehungen zueinander. Jede Anforderung, Tätigkeit, Verarbeitungsschritt findet in einem Kontext statt. Verschiedene Tätigkeiten finden in verschiedenen Kontexten statt, wobei diese allerdings überlappen, respektive scheinbar fliessend ineinander übergehen. Da man Themen selten sowohl tief als auch breit behandeln kann, versucht DDD diese Kontexte abzugrenzen. Dafür liefern sprachliche Bedeutungsunterschiede und bereits existierende Strukturen, z.B. Abteilungen, entscheidende Hinweise (siehe Illustration).

Quelle: https://www.martinfowler.com/bliki/BoundedContext.html

Hat man die «Bounded Contexts» definiert, können die Anforderungen innerhalb jedes Kontexts in beliebiger Tiefe analysiert und umgesetzt werden. Es ist offensichtlich, dass die Übergänge zwischen Kontexten sorgfältig angegangen werden sollten: Nicht nur weil sich die Bedeutung von Konzepten und getroffene Annahmen ändern, sondern auch weil an verschiedene Kontexte oft unterschiedliche non-funktionale Anforderungen gestellt werden. Zum Beispiel wird das «Produkte Management» nur von 5 Mitarbeitern bedient, während der «Online Shop» täglich tausende Kunden bedient. Andererseits werden sowohl «Produkte Management» als auch «Online Shop» vom eigenen Team auf Linux VMs in der Cloud betrieben, während die «Auslieferung» wegen Anbindungen an das physische Lagersystem und diverse Etikett Drucker vor Ort unter Windows betrieben wird und vom Lagersystemhersteller entwickelt wird.

Die Aufteilung von Kontexten auf Applikationen und die Skalierung von Applikationen auf viele Server wird schnell problematisch.  Skalierungsanforderungen können oft nicht sinnvoll abgeschätzt werden da sie vom Erfolg des Unternehmens abhängen. Jedoch kann kein Unternehmen es sich leisten alles vorsorglich in Google-Grössenordnungen umzusetzen. Ausserdem gibt es eine Vielzahl von Kommunikationsmechanismen mit leicht unterschiedlichen Tradeoffs. Es hat sich gezeigt, dass das Konzept von «Events» (Ereignissen) die Kommunikation zwischen Kontexten berechenbar macht und trotzdem gewisse «technische» Unterschiede – wo sinnvoll – zulässt. Die Erkenntnis führte zum Konzept der «event-driven» (ereignisgetriebenen)  Anwendungen.

DDD hilft Applikationen die funktionalen Anforderungen abzudecken. Die Kombination von DDD und Ideen aus dem Nähkästchen von «event-driven» Anwendungen gibt Applikationen die nötige Flexibilität um auch non-funktionale Anforderungen nachzukommen.

Wer mehr zu diesem spannenden Thema erfahren will, kann dies an unserem Meetup mit Allard Bujize von AxonIQ tun.

Der Anlass findet am 18. November 2021 zwischen 17:00 und 19:00 statt, und bespricht sowohl Theorie als auch ein praktisches Code-Beispiel anhand des Axon Frameworks.

Sprache: Englisch

Anmeldung auf https://lp.axoniq.io/axoniq-meetup#form
oder für Meetup Mitglieder https://www.meetup.com/Domain-Driven-Design-Switzerland/events/281690302