Interview mit Lutz Hühnken

Event Storming & Co: „Domain-driven Design lebt!“

Dominik Mohilo

Lutz Hühnken

Domain-driven Design lebt! Zwar hat sich DDD, wie Lutz Hühnken im Interview erklärt, im Laufe der letzten 15 Jahre verändert, doch das macht es nicht zum Auslaufmodell. Wir sprachen mit dem freiberuflichen Consultant, Trainer und Solutions Architect darüber, wieso Domain-driven Design so gut (oder nicht gut) mit Microservices zusammenpasst und was es mit dem Java 9 Flow API auf sich hat.

JAXenter: Hallo Lutz und danke, dass du dir die Zeit genommen hat. Auf der JAX 2018 hältst du in diesem Jahr unter anderem einen Workshop zu Domain-driven Design und Microservices. DDD ist ein Architekturansatz, der bereits 15 Jahre auf dem Buckel hat. Wird das Konzept irgendwann zum Auslaufmodell oder ist es für die Ewigkeit gemacht?

Lutz Hühnken: Was ist schon für die Ewigkeit? Aber DDD lebt! Wir betreiben es heute anders als vor 15 Jahren. In meinem Workshop wenden wir zum Beispiel Event Storming an. Ein Format, das aus der DDD-Community kommt, aber ganz klar den Schwerpunkt auf Events First setzt. Wichtige Grundsätze von DDD – zum Beispiel die gemeinsame Sprache, das Verstehen der Domäne – sind zeitlos. Die konkrete Umsetzung entwickelt sich aktiv weiter. So bleibt es relevant.

JAXenter: Du bist nicht der erste, der Microservices und DDD als „perfect match“ ansieht. Warum passt das so gut?

Es gibt Teile im klassischen DDD, die mit Microservices nichts zu tun haben.

Lutz Hühnken: Ich bin nicht nur nicht der erste, ich würde das sogar so gar nicht sagen. Was den Zuschnitt von Services angeht, helfen uns die DDD Konzepte wie Bounded Contexts und Aggregates enorm, um darüber zu kommunizieren – ich denke, daher kommt diese Aussage. Es gibt aber andere Teile im „klassischen“ DDD, die mit Microservices einfach nichts zu tun haben. Und sogar Patterns, wie Shared Kernel, mit denen wir im Microservices-Umfeld sehr kritisch umgehen sollten.

JAXenter: In deinem Workshop wirst du auch Command Query Responsibility Segregation (CQRS), Event Storming und Event Sourcing thematisieren, was genau versteht man darunter?

Lutz Hühnken: Das in wenigen Sätzen zu beantworten, ist eine Herausforderung. Event Storming hatte ich ja eben schon erwähnt. Es ist ein ganz tolles Workshop-Format, in dem wir eine Domäne ausgehend von Geschäftsereignissen erforschen.

Bei Event Sourcing und CQRS geht es darum, wie wir Daten speichern. Statt in eine einzelne Datenbank zu schreiben, teilen wir die Zuständigkeit in CQRS auf verschiedene Modelle auf. Dies eröffnet neue Möglichkeiten zum Beispiel beim Schreiben der Daten. Hier können wir Event Sourcing einsetzen, wo wir alle relevanten Ereignisse dauerhaft speichern – nicht nur den aktuellen Zustand.

JAXenter: Microservices nach DDD-Konzept bringen ganz eigene Herausforderungen mit sich. Kannst du vielleicht einige davon näher beleuchten?

Lutz Hühnken: Wer Microservices entwickelt, erstellt ein verteiltes System. Die Abgrenzungen zwischen den Services bekommen ein echtes Gewicht, insbesondere was Transaktionen und Konsistenz von Daten angeht. Wenn unser Modell nicht so ganz sauber ist, können wir das in einem Monolithen immer noch übertünchen, da wir im Endeffekt doch irgendwie alles im direkten Zugriff haben. Mit Microservices geht das nicht mehr!

JAXenter: Du wirst ebenfalls eine Session zum Java-9-Flow-API halten. Was ist das Faszinierende und Tolle an dem Interface?

Lutz Hühnken: Hier ist ein de-facto-Standard, der in den letzten Jahren in der Community entwickelt wurde, in die Standard-Library aufgenommen worden. Es gibt schon jetzt ein beeindruckendes Library-Ökosystem für die so genannten Reactive Streams – von vert.x, Reactor, Akka und anderen. Dazu gibt es viele Stream-basierte I/O-Bibliotheken – für Cassandra, Kafka, HTTP, MongoDB etc. Ich kann nun in einer Art Plug-and-Play all diese Systeme verbinden, und das Ganze mit durchgehender Flow-Control – Wahnsinn! Sie implementieren eben intern alle die Flow-Interfaces, was der Grund dafür ist, dass es so funktioniert.

JAXenter: Java 10 ist gerade erschienen, hast du ein Lieblingsfeature?

Lutz Hühnken: Die Typinferenz mit var gefällt mir sehr gut. Ich hätte mir nur gewünscht, dass gleichzeitig auch val für Konstanten eingeführt worden wäre, wie in Scala!

JAXenter: Was ist die Quintessenz, die jeder aus deiner Session und deinem Workshop mit nach Hause nehmen soll?

Lutz Hühnken: Beides sind im Grunde Einsteiger-Veranstaltungen – ich möchte Leuten, die sich mit dem jeweiligen Thema noch nicht so beschäftigt haben, die Augen öffnen für etwas, was ich für interessant und relevant halte. Obwohl sie auf den ersten Blick wenig miteinander zu tun haben, geht es übrigens bei beiden um Techniken, die in der Praxis bei der Entwicklung skalierbarer, reaktiver Systeme enorm hilfreich sind!

JAXenter: Vielen Dank für das Interview!

Lutz Hühnken ist freiberuflicher Consultant, Trainer und Solutions Architect. Er arbeitet seit 1997 in der Softwareentwicklung und war in verschiedenen Rollen an der Realisierung von Webprojekten in unterschiedlichen Branchen beteiligt. Aktuell beschäftigt er sich vorrangig mit Reactive Systems – der Entwicklung von fehlertoleranten, skalierbaren, verteilten Systemen – mit Scala, Akka, Play und Lagom.
Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.