JAX Blog

Domain-driven Design: Welche Rolle es für Microservices spielt

Nov 17, 2016

Microservices gehören zu den größten Architektur-Trends der letzten Jahre. Wir haben Eberhard Wolff, Speaker bei der W-JAX 2016, im Interview gefragt, wie man diesen Trend mit dem Domain-driven Design verbinden kann.

JAX 2017 Sessions mit Eberhard Wolff

Microservices gehören zu den größten Architektur-Trends der letzten Jahre. Wir haben Eberhard Wolff, Speaker bei der W-JAX 2016, im Interview gefragt, wie man diesen Trend mit dem Domain-driven Design verbinden kann.

JAXenter: Wo liegen die besonderen Herausforderungen bei der Datenhaltung für Microservice-Systeme?

Eberhard Wolff: Jeder Microservice soll eine eigene, getrennte Datenhaltung haben, um so eine bessere Entkopplung zu erreichen. Dadurch ergibt sich die Frage, ob gemeinsam genutzte Daten redundant in jedem Microservice gehalten werden sollen oder ob man bei der Trennung der Datenhaltung Kompromisse eingeht. Eine weitere Frage ist der fachliche Gültigkeitsbereich der Daten – der Bounded Context.

JAXenter: Das Konzept des Domain-driven Design wurde schon 2003 geprägt. Welche Rolle spielt es im Bezug auf Microservices?

Eberhard Wolff: Viele Architekten erkennen durch den aktuellen Trend zu Microservices, wie wichtig der fachliche Schnitt von Systemen ist. Genau dort hilft Domain-driven Design. Interessanterweise hat Eric Evans in seinem Buch „Domain-driven Design“ neben der Architektur auch die Zusammenarbeit zwischen Teams beschrieben. Auch die Wechselwirkung zwischen der Organisation und Architektur wird gerade durch Microservices wieder aktuell.

JAXenter: Die Prinzipien für DDD sind meist grundsätzlich bekannt – allein die Umsetzung in der Praxis ist alles andere als trivial. Auf welche typischen Probleme bist du in Projekten bei der Umsetzung von DDD gestoßen?

Eberhard Wolff: Die Building Blocks wie Entity, Value Object, Repository usw. sind meistens bekannt – und auch intuitiv leicht zu erfassen. Aber Strategic Design und Bounded Context kennen viele nicht. Die Idee, dass selbst grundlegende Geschäftsobjekte wie Kunde oder Bestellung nicht allgemeingültig für ein ganzes Unternehmen definiert werden können, überraschen immer noch viele. Daher werden diese Patterns auch noch nicht breit genutzt. Gerade Strategic Design wirklich gut umzusetzen, erfordert also ein grundlegendes Umdenken.

JAXenter: Kannst du einen Praxis-Tipp geben, wie DDD erfolgreich realisiert werden kann?

Eberhard Wolff: Bei meinen Trainings setzte ich darauf, konkrete Beispiele nach DDD praktisch entwerfen zu lassen. Dabei fokussiere ich jeweils auf eine Ebene von DDD – beispielsweise Building Blocks oder Strategic Design. Die Ergebnisse diskutieren wir dann und ich gebe ebenfalls Feedback – das erleichtert den Start.

JAXenter: Zurück zu Microservices: Auf der W-JAX baust du in deinem Workshop eine Microservice-Anwendung mit Spring Boot, Spring Cloud und dem Netflix Stack. Was ist für dich an diesem Technologie-Stack so reizvoll?

Eberhard Wolff: Spring Boot und Spring Cloud setzten Microservices auf Basis des populären Spring-Frameworks um. Netflix ist einer der wichtigsten Anwender von Microservices-Ansätzen. Daher bietet dieser Technologie-Stack eine ideale Basis für die Entwicklung von Java-Microservices – praxiserprobt bei Netflix und gleichzeitig mit einer niedrigen Einstiegshürde, insbesondere für Spring-Entwickler.

Alle News der Java-Welt:

Behind the Tracks

Agile, People & Culture
Teamwork & Methoden

Clouds & Kubernetes
Alles rund um Cloud

Core Java & Languages
Ausblicke & Best Practices

Data & Machine Learning
Speicherung, Processing & mehr

DevOps & CI/CD
Deployment, Docker & mehr

Microservices
Strukturen & Frameworks

Performance & Security
Sichere Webanwendungen

Serverside Java
Spring, JDK & mehr

Software-Architektur
Best Practices

Web & JavaScript
JS & Webtechnologien

Digital Transformation & Innovation
Technologien & Vorgehensweisen

Domain-driven Design
Grundlagen und Ausblick

Spring Ecosystem
Wissen in Spring-Technologien

Web-APIs
API-Technologie, Design und Management