Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf...

40
Microservices <3 Domain Driven Design Michael Plöd - innoQ @bitboss

Transcript of Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf...

Page 1: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Microservices

<3

Domain Driven Design

Michael Plöd - innoQ@bitboss

Page 2: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Disclaimer

Michael Plöd - innoQ@bitboss

Die meisten dieser Ideen stammen nicht von mir sondern aus Eric Evans herausragendem Buch Domain

Driven Design. Dieses Buch möchte ich jedem Zuhörer meines Vortrags empfehlen.

Ich übernehme die englischen Bezeichnungen aus Erics Buch im Sinne der Ubiquitous Language

(Stichwort: Anglizismen)

Page 3: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

D D D in Microservices

Der Zusammenhang von DDD und Microservices geht über

Bounded Contexts hinaus

Bei DDD geht es um mehr als nur um Aggregate, Entitäten

und Services

Page 4: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Domain Driven Design

hilft uns im Hinblick auf Microservices in

vier Bereichen

Strategic Design

(Internal) Building Blocks

Large ScaleStructure

Destillation

Page 5: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Strategic Design

Strategic Design besteht aus

Bounded Context

Context Map

Shared Kernel

Customer /

Supplier

Conformist

Anticorruption

Layer

Separate Ways

Open / Host

Service

Published

Language

Page 6: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Bounded Context

Jede anspruchsvolle Domäne besteht aus mehreren Bounded Contexts

Jeder Bounded Context enthält sein Model und ggf weitere Contexts

Der Bounded Context ist zudem eine Grenze um die Gültigkeit eines Models

Animation verfeinern

Page 7: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Bounded Context Beispiel

Anmeldung

EventManagement Badges

Kunde

Name

Zahlungsart

Adresse

Firma

Session Registrierungen

Essenspräferenzen

Name

Job Titel

Twitter Handle

Page 8: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Bounded Context Example

Anmeldung

EventManagement Badges

Name

Zahlungsart

Adresse

Firma

Session Registrierungen

Essenspräferenzen

Name

Job Titel

Twitter Handle

Jeder Bounded Context hat sein eigenes Model eines Kunden

Dies ist ein wichtiger Enabler für unabhängige Microservices

Bitte beachten Sie den Namen des Kunden, vielleicht ein Anlass für geteilte Daten

Page 9: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Strategic Design

Strategic Design besteht aus

Bounded Context

Context Map

Shared Kernel

Customer /

Supplier

Conformist

Anticorruption

Layer

Separate Ways

Open / Host

Service

Published

Language

Page 10: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Context MapStrategicDesign

Der Bounded Context an sich liefert noch keinen Überblick über ein System

Durch die Einführung einer Context Map beschreiben wir, wie sich Models propagieren

Die Context Map ist somit eine gute Ausgangsbasis für künftige Transformationen

Page 11: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Patterns

Shared Kernel

Customer /

Supplier

Conformist

Anticorruption

Layer

Separate Ways

Open / Host

Service

Published

Language

Page 12: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Patterns

Shared Kernel

Customer / Supplier

Conformist

Anticorruption Layer

Separate Ways

Open / Host Service

Published Language

Zwei Teams teilen sich ein Subset eines Domain Models inklusive Code und ggf. der Datenbank. Der Shared Kernel wird häufig auch als Kerndomäne bezeichnet.

Page 13: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Patterns

Shared Kernel

Customer / Supplier

Conformist

Anticorruption Layer

Separate Ways

Open / Host Service

Published Language

Es gibt eine Kundenbeziehung zwischen zwei Teams. Das konsumierende Team ist Kunde mit häufig weitreichendem Einfluss (z.B. Vetorecht).

Page 14: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Patterns

Shared Kernel

Customer / Supplier

Conformist

Anticorruption Layer

Separate Ways

Open / Host Service

Published Language

Das konsumierende Team passt sein Model dem Model des Dienstanbieters an. Es findet keine Übersetzung des Models statt. Das konsumierende Team hat zudem kein Vetorecht. Achtung vor Propagation von schlechten Models!

Page 15: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Patterns

Shared Kernel

Customer / Supplier

Conformist

Anticorruption Layer

Separate Ways

Open / Host Service

Published Language

Der Anticorruption Layer ist eine Komponente, die das Model eines Clients von dem eines anderen Systems isoliert. Üblicherweise geschieht dies über eine Model-Transformation.

Page 16: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Patterns

Shared Kernel

Customer / Supplier

Conformist

Anticorruption Layer

Separate Ways

Open / Host Service

Published Language

Es gibt keine Verbindung zwischen den Bounded Contexts von Systemen. Dies erlaubt den Teams unabhängig voneinander Lösungen zu finden und auszurollen.

Page 17: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Patterns

Shared Kernel

Customer / Supplier

Conformist

Anticorruption Layer

Separate Ways

Open / Host Service

Published Language

Jeder Bounded Context bietet ein definiertes Set an Services / Funktionalität nach aussen hin an. Jedes konsumierende System kann über diese integrieren.

Page 18: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Patterns

Shared Kernel

Customer / Supplier

Conformist

Anticorruption Layer

Separate Ways

Open / Host Service

Published Language

Die Published Language is relativ ähnlich zum Open / Host Service. Allerdings erfolgt die Model Abstraktion über die Ubiquitous Language.

Page 19: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

StrategicDesign Context Map - Beispiel

A B

C D

C D

A B

Anticorruption

share kernel

conforms

conforms

Page 20: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Unabhängigkeit

Enge Kopplung

StrategicDesign und Conway’s Law

Shared Kernel

Customer / Supplier

Conformist

Anticorruption Layer

Separate Ways

Open / Host Service

Published Language

Team

Ko

mmun

ikat

ion

Page 21: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Domain Driven Design

hilft uns im Hinblick auf Microservices in

vier Bereichen

Strategic Design

(Internal) Building Blocks

Large ScaleStructure

Destillation

Page 22: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Building Blocks helfen uns beim Entwurf der Interna eines Bounded Contexts

Aggregates

(Internal) Building Blocks

Entities

Value Objects

Factories

Services

Repositories

Page 23: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

BuildingBlocks Entities

Entities stellen die Kern Business Objekte einer Domäne dar

Jede Entity hat eine konstante Identität

Jede Entity hat einen eigenen Lebenszyklus

Kunde

Kredit Antrag

Shipment

Page 24: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

BuildingBlocks Value Objects

Value Objects haben keine eigenen Identität, es zählt die Ausprägung der Attribute

Value Objects haben keinen Lebenszyklus, er hängt von der referenzierenden Entität ab

Value Objects sind sehr wertvoll für das Domänen Modell

Farbe

Währungsbetrag

Kunde

Page 25: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

BuildingBlocks

Ist „Kunde“ eine Entity der ein Value Object

Grundsätzlich hängt diese Entscheidung vom Bounded Context ab.

Kunde Beispiel: Ein Kunde ist in einer CRM-Anwendung sicherlich eine Entität wohingegen er in der Anwendung für die Badges eher ein Value Object ist.

Page 26: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

BuildingBlocks Aggregates

Unterschätze niemals die Macht des Aggregates

Page 27: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

BuildingBlocks Aggregates

<Entity> Selbstauskunft

<ValueObject> Adresse

<ValueObject> TilgungsDetails

<Entity> Kredit

<Entity> Kunde

<Entity>KreditAntrag

<Root Entity> <Root Entity>

Aggregate gruppieren Entitäten. Die Root-Entity steuert den Zugriff und den Lebenszyklus des Objektgraphen.

Page 28: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

BuildingBlocks

Factories, Services, Repositories

Aggregates

Entities

Value Objects

Factories

Services

Repositories

Factories übernehmen die Instantiierung von Entities und Aggregates

Repositories sind für Datenzugriff zuständig

Services implementieren Fachlogik, die mehrere Entities und Aggregate betrifft

Page 29: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Domain Driven Design

hilft uns im Hinblick auf Microservices in

vier Bereichen

Strategic Design

(Internal) Building Blocks

Large ScaleStructure

Destillation

Page 30: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Large Scale Structure hilft bei der Evolution der Microservice Landschaft

EvolvingOrder

Large ScaleStructure

SystemMetaphor

ResposibilityLayers

Page 31: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

LargeScale

Structure Evolving Order

Job Title: Chief Ivory Tower Architect

Rigide Development Guidelines

Unflexible Architektur Klare Regeln für jedes kleine Detail

„Ich brauche nur billige Entwickler und übernehme das Denken für Sie“

Page 32: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

LargeScale

Structure Evolving Order

Entwickler Team

System is zu komplex

Wir müssen uns darauf fokussieren, die Regeln einzuhalten Wir benötigen Workarounds um die Regeln zu umgehen

Page 33: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Ziemlich ähnlich zu

jedem Microservice

„Pitch“?

LargeScale

Structure Evolving Order

Evolving

Order

Grosse Strukturen sollten sich natürlich entwickeln

Diese Strukturen sollten entlang der Bounded Contexts anwendbar sein

Aber, es sollte einige praktische Constraints geben.

Page 34: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

LargeScale

Structure Responsibility Layers

Registration

EventManagement

Badges

Mailings

Speakers

Jeder Microservice ist entlang eines Bounded

Context entworfen

Innerhalb der Microservices strukturiert man mit den

Building Blocks

Allerdings sollte man zudem Microservices entlang ihrer

Zuständigkeiten anordnen

Page 35: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Domain Driven Design

hilft uns im Hinblick auf Microservices in

vier Bereichen

Strategic Design

(Internal) Building Blocks

Large ScaleStructure

Destillation

Page 36: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Destillation hilft uns bei der Extraktion von Microservices aus einem Monolithen

Destillation

Page 37: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Destilla-tion Identifikation der Kerndomäne

Destillation Document

Beschreibt den Extraktionsvorgang

Vision Statement

Definiert was Bestandteil der

Kerndomänen ist und was nicht

Page 38: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Destilla-tion Extraktion von Subdomänen

Identifikation der Subdomäne

ExtraktionSaubere Trennung

Internes Refactoring

Page 39: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Microservices

Domain Driven Design

Strategic Design

(Internal) Building Blocks

Large ScaleStructure

Destillation

<3

Page 40: Microservices love DDD Deutsch - Java Forum …Domain Driven Design hilft uns im Hinblick auf Microservices in vier Bereichen Strategic Design (Internal) Building Blocks Large Scale

Vielen Dank!

<3

Michael Plöd - innoQ@bitboss