© Liashko/Shutterstock.com
Vaughn Vernon über DDD, Microservices und reaktive Programmierung

„Ich wollte nicht nur das Was, sondern auch das Wie zeigen“


Die Geburtsstunde des Domain-driven Design liegt im Jahr 2003. Eric Evans Buch „Domain-Driven Design: Tackling Complexity in the Heart of Software“ war ein Meilenstein und wird heute noch vielfach rezipiert. Entscheidend zur Verbreitung von DDD hat zudem Vaughn Vernons Werk „Implementing Domain-Driven Design“ beigetragen. Wir haben uns mit Vaughn über die Motivation und Kernideen hinter DDD sowie ihr Verhältnis zu Microservices und reaktiven Architekturen unterhalten.

Entwickler Magazin: Das Konzept des Domain-driven Design wurde Anfang der 2000er geprägt. Wenn du dich ein wenig in diese frühe Periode zurückversetzt: Welche Probleme hatte die Softwareentwicklung damals, die dann von der DDD-Bewegung angegangen wurden?

Vaughn Vernon: Ich habe es so wahrgenommen: Zu jener Zeit war die Softwareentwicklung in eine Art Abwärtsspirale geraten. Grund dafür war die Verbreitung einiger meiner Meinung nach äußerst schlechter Spezifikations- und Designentscheidungen durch gewisse Branchenführer. So hatte die damals gerade veröffentlichte J2EE-Spezifikation (jetzt Java EE bzw. Jakarta EE) verheerende Auswirkungen auf das Java-Ökosystem. Die J2EE-Spezifikation förderte die Verwendung von Komponententypen wie EJB Entity Beans, auf deren Konto viele gescheiterte Projekte gingen. Ich glaube nicht, dass die Spezifikationsteams damals ahnten, welche Probleme sie durch ihre Arbeit verursachen würden. Vielleicht wurden ihre Absichten einfach nicht richtig kommuniziert und durch klare Leitmuster unterstützt. Es dauerte jedenfalls Jahre, bis eine angemessene Dokumentation die Runde machte.

Diese Ära war auch für die Industrie eine Herausforderung, da sich der Dotcomboom schnell ausbreitete und viele Start-ups und Teams nicht wussten, welche Technologien sie verwenden sollten. Das Internet war populär geworden und darum herum bildete sich die Dotcomblase.

Auch die Anbieter von Tools wurden von diesem Boom erfasst und versuchten, den finanziellen Aufwärtstrend der Branche mitzugehen. Unter diesen Umständen hatte die große Anzahl von Marktimpulsen, die rein von Profitgier getrieben waren, eine destabilisierende Wirkung. Es wurde schwierig, einen spannenden Job zu finden, wenn im Lebenslauf nicht Buzzwords wie J2EE oder EJB zu finden waren. Und doch war es der breite (Fehl-)Einsatz von Dingen wie J2EE und EJB, der so viel Misserfolg verursachte.

Dazu kam die riesige Informationsflut an schlechten Programmierbeispielen aus Quellen, die vor allem am Geschäftemachen interessiert waren. Viel zu viele junge Programmierer, die neu in die Branche eintraten, aber auch erfahrene Entwickler, die mit den neuen Technologien nicht vertraut waren, wurden von diesen schlechten Beispielen beeinflusst. Ergebnis waren zahlreiche problematische Softwaredesigns, auf kleiner wie auf großer Ebene. Es ist wirklich kein Wunder, dass die Industrie zu der Zeit so viele gescheiterte Projekte und so viele fehlgeleitete Softwareentwickler hervorbrachte.

EM: Wie bist du persönlich mit DDD in Kontakt gekommen? Welche Inspirationen hat die DDD-Bewegung dir in dieser Zeit gegeben?

Vernon: Ich hatte bereits viele Techniken im Einsatz, die dann später Domain-driven Design genannt wurden. Die Teams, mit denen ich arbeitete, schwitzten bei der Namensgebung und der Entwicklung von Fluent-Modellen. Meine Auseinandersetzung mit Domänenmodellen begann in den 1980er Jahren, als ich C++ und Smalltalk lernte. Ich programmierte bereits in C, und die Idee von Objekten in C++ schien sehr faszinierend zu sein. Als ich mich jedoch in C++ vertiefte, gab es Probleme sowohl mit den Tools und der Entwicklungsumgebung als auch mit der Sprache und ihrer Verwendung. Ich könnte stundenlang darüber reden, aber ich will nur sagen, dass ich später gelernt habe, wie weit entfernt C++ von einer echten Objektorientierung war.

Erst als ich von Smalltalk und einer seltsamen kleinen Sprache namens C-Talk sowie einer anderen Sprache namens Objective-C erfuhr, begann ich, Objekte richtig zu verstehen. Smalltalk war eine so unglaublich produktive Entwicklungsumgebung, dass ich manchmal nicht glauben konnte, wie schnell ich sehr komplexe Probleme lösen konnte. Es gab einige Bemühungen, C++-Bibliotheken zu erstellen, die Smalltalk nachahmten. Beispielsweise entwickelten die US National Institutes of Health eine solche Bibliothek, die Smalltalk-ähnliche Collections bereitstellte. Aber es gab dabei immer wieder seltsame Kompromisse.

So änderten Smalltalk und der Einfluss, den es auf meine zukünftige Verwendung von C und C++ hatte, alles. Smalltalk war eine natürliche, ausdrucksstarke Umgebung. Fast alles, was wir taten, war effektiv das, was wir heute interne DSLs nennen würden.

Jetzt erinnere dich an meine erste Antwort und stell dir meine Gemütslage vor. Du liebst es, Software zu entwickeln, und du liebst es noch mehr, Software in Smalltalk zu entwickeln. Und dann dieser große Wirrwarr rund um J2EE, EJB und andere unglaublich seltsame Technologien. Früher habe ich stundenlang versucht, den Leuten zu erklären, warum sie J2EE trotz des großen Hypes nicht verwenden sollten. (Ja, einige Teile wie EJB Session Beans sind sinnvoll, solange man es zusammen mit TopLink bzw. später Hibernate verwendet). Ich habe versucht, den Leuten MVC zu erklären – echtes MVC –, und wie diese Konzepte mit der Webentwicklung zusammenhängen. Aber es ist einfach nicht tief genug in die Köpfe eingedrungen.

Während dieser Zeit, also über 15 Jahre nach meiner ersten Verwendung von C++ und Smalltalk, erfuhr ich von DDD. Jemand erwähnte Erics Buch als eine Quelle hilfreicher objekt-orientierter Muster. Ich schätzte die Meinung dieses erfahrenen OO-Programmierers, also musste das Buch gut sein. Am selben Abend fuhr ich zu einem Tech-Buchladen, der „alle...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang