SlideShare ist ein Scribd-Unternehmen logo
1 von 63
Downloaden Sie, um offline zu lesen
WPS - Workplace Solutions GmbH //// Hans-Henny-Jahnn-Weg 29 //// 22085 HAMBURG
Monolithen mit DDD zerlegen
Dr. Carola Lilienthal
@cairolali
cl@wps.de
@cairolali
cl@wps.de
www.llsa.de
Software-
Architektur
Domain
Storytelling
Arbeitsplatz
der Zukunft
Individual-
software
Business-Software,
die Spaß macht!
WPS – Workplace Solutions GmbH
24.01.2019 //// Seite 7WPS - Workplace Solutions GmbH
5 20
70
150
70 bis 15 Mio
bis 5 Mio
bis 1 Mio
bis 500.000
bis 100.000
463 tangled classes belonging to
10 different components
24.01.2019 //// Seite 11WPS - Workplace Solutions GmbH
24.01.2019 //// Seite 12WPS - Workplace Solutions GmbH
MODULARITY MATURITY INDEX (MMI)
612.869 LOC
14.756.435 LOC
252.062 LOC
804.093 LOC
543.388 LOC
1.035.668 LOC
486.358 LOC
175.258 LOC
42.311 LOC
193.383 LOC
643.466 LOC
245.754 LOC
2.890.204 LOC
141.696 LOC
512.086 LOC
9.988.363 LOC
200.591 LOC
922.949 LOC
22.658 LOC
663.862 LOC
3.270.188 LOC
1.521.357 LOC
0
2
4
6
8
10
Team Head
Team Tail
Team Body
Team Leg
Team Head
Team Tail
Team Body
Team Leg
Team Head
Team Tail
Team Body
Team Leg
Team Head
Team Tail
Team Body
Team Leg
Team Emma
Team Berta
Team Erna
Team Lisl
24.01.2019 //// Seite 19WPS - Workplace Solutions GmbH
WAS IST DOMAIN-DRIVEN DESIGN?
▪ Eine Herangehensweise an die Entwicklung von Software,
die dafür sorgt, dass die Software tief in der Domäne
verwurzelt ist.
▪ Das gelingt durch die Umsetzung der Ubiquitous Language
in mehreren kontextbezogenen Domänenmodellen
▪ Der Kontext dieser Modelle heißt Bounded Context
Software
Domäne
24.01.2019 //// Seite 20WPS - Workplace Solutions GmbH
LIVING IN A BOX
Setze explizite Grenzen …
▪ Ein Team pro fachlicher Subdomäne
▪ Erhalte die Konsistenz innerhalb der Grenzen
▪ Keine Ablenkung durch äußere Angelegenheiten
→ Freie Gestaltung eines Teilmodells
durch ein Team
▪ Kenne die Restriktionen
▪ Bleibe innerhalb der Modellgrenzen
▪ Arbeite schnell in Deinen Grenzen
24.01.2019 //// Seite 21WPS - Workplace Solutions GmbH
JEDER BOUNDED CONTEXT HAT SEIN EIGENES MODELL
ZIEL:
▪ Jedes Team kann an seinem eigenen Domänen-Modell arbeiten
▪ Man kennt seine Grenzen
▪ Man bleibt in seinen Grenzen
24.01.2019 //// Seite 22WPS - Workplace Solutions GmbH
KLASSISCHES DOMÄNENMODELL – REALITÄT
▪ Mehrere vermischte mentale Modelle
▪ Unbeherrschbare Komplexität
▪ Abhängigkeiten unter den Teams
Foto: CMS Higgs-even/Wikipedia/CC-BY-SA-3.0
🤦‍♂️
24.01.2019 //// Seite 27WPS - Workplace Solutions GmbH
JEDER BOUNDED CONTEXT HAT SEIN EIGENES MODELL
ZIEL:
▪ Jedes Team kann an seinem eigenen Domänen-Modell arbeiten
▪ Man kennt seine Grenzen
▪ Man bleibt in seinen Grenzen
463 tangled classes belonging to
10 different components
24.01.2019 //// Seite 30WPS - Workplace Solutions GmbH
MODULITH FIRST
▪Ausschneiden eines MS aus einem Monolithen ist nur möglich, wenn
dieser fachliche modularisiert ist
User Interface
Domain
Application
Fachliches
Modul B
Fachliches
Modul A
So wenig Beziehungen wie möglich!
TechnischeSchichtung
Fachliches
Modul C
24.01.2019 //// Seite 32WPS - Workplace Solutions GmbH
WIE SCHNEIDE ICH MEINE DOMÄNE?
▪ Nach Abteilungen in der Organisation bzw. Gruppen von Domänenexperten
▪ Nach Unterschieden in der Verwendung/Definition von Schlüsselkonzepten in der Domäne
▪ Nach Grenzen im Geschäftsprozess, die die Domänenexperten beschreiben
▪ Information läuft in eine Richtung
▪ Prozesse werden in unterschiedlichen
Rhythmen ausgeführt
▪ Prozesse werden von verschiedenen
Triggern ausgelöst.
KASSEN-
MITARBEITER
KINO-
BESUCHER
WOCHENPLAN
<< in Arbeit >>
GEWÜNSCHTE
ANZAHL PLÄTZE
SAALPLAN
SAALPLAN-
STAPEL
VERKAUFTE
PLÄTZE
KARTEN
VORSTELLUNG
GEFUNDENE
PLÄTZE
SAALPLAN SAALPLAN
WOCHENPLAN
<< finalisiert >>
VERLEIHER
KINO-
MANAGER
WERBE-
AGENTUR BUCHUNGSPLAN
DER WERBUNG
VORGABEN
FÜR FILME
GESAMTDEUTSCHE
BESUCHERZAHLEN
VERFÜGBARKEIT
VON FILMEN
1
6
2
10
5
3
8
4
7
9
11
12
13
14
SAALPLAN
15
BEGINNT
SEINE ARBEIT
AN DEM
ÜBERPRÜFT
VERHANDELT
MIT
FINALISIERT
DEN
ERZEUGT FÜR DIE
NÄCHSTE WOCHE
GELDSUMME KINOKARTEN
BEZAHLTE
KINOKARTEN
FRAGT NACH
FÜR EINE
ÖFFNET
SCHLIESST
AUS DEM
BIETET
AN BEZAHLT
AN
SUCHT
IM IM
MARKIERT
DRUCKT
AUS
ÜBERGIBT
AN
KASSEN-
MITARBEITER
KINO-
BESUCHER
WOCHENPLAN
<< in Arbeit >>
GEWÜNSCHTE
ANZAHL PLÄTZE
SAALPLAN
SAALPLAN-
STAPEL
VERKAUFTE
PLÄTZE
KARTEN
VORSTELLUNG
GEFUNDENE
PLÄTZE
SAALPLAN SAALPLAN
WOCHENPLAN
<< finalisiert >>
VERLEIHER
KINO-
MANAGER
WERBE-
AGENTUR BUCHUNGSPLAN
DER WERBUNG
VORGABEN
FÜR FILME
GESAMTDEUTSCHE
BESUCHERZAHLEN
VERFÜGBARKEIT
VON FILMEN
1
6
2
10
5
3
8
4
7
9
11
12
13
14
SAALPLAN
15
BEGINNT
SEINE ARBEIT
AN DEM
ÜBERPRÜFT
VERHANDELT
MIT
FINALISIERT
DEN
ERZEUGT FÜR DIE
NÄCHSTE WOCHE
GELDSUMME KINOKARTEN
BEZAHLTE
KINOKARTEN
FRAGT NACH
FÜR EINE
ÖFFNET
SCHLIESST
AUS DEM
BIETET
AN BEZAHLT
AN
SUCHT
IM IM
MARKIERT
DRUCKT
AUS
ÜBERGIBT
AN
Trigger
Trigger
KASSEN-
MITARBEITER
KINO-
BESUCHER
WOCHENPLAN
<< in Arbeit >>
GEWÜNSCHTE
ANZAHL PLÄTZE
SAALPLAN
SAALPLAN-
STAPEL
VERKAUFTE
PLÄTZE
KARTEN
VORSTELLUNG
GEFUNDENE
PLÄTZE
SAALPLAN SAALPLAN
WOCHENPLAN
<< finalisiert >>
VERLEIHER
KINO-
MANAGER
WERBE-
AGENTUR BUCHUNGSPLAN
DER WERBUNG
VORGABEN
FÜR FILME
GESAMTDEUTSCHE
BESUCHERZAHLEN
VERFÜGBARKEIT
VON FILMEN
1
6
2
10
5
3
8
4
7
9
11
12
13
14
SAALPLAN
15
BEGINNT
SEINE ARBEIT
AN DEM
ÜBERPRÜFT
VERHANDELT
MIT
FINALISIERT
DEN
ERZEUGT FÜR DIE
NÄCHSTE WOCHE
GELDSUMME KINOKARTEN
BEZAHLTE
KINOKARTEN
FRAGT NACH
FÜR EINE
ÖFFNET
SCHLIESST
AUS DEM
BIETET
AN BEZAHLT
AN
SUCHT
IM IM
MARKIERT
DRUCKT
AUS
ÜBERGIBT
AN
Trigger
Einmal pro Woche Trigger
KASSEN-
MITARBEITER
KINO-
BESUCHER
WOCHENPLAN
<< in Arbeit >>
GEWÜNSCHTE
ANZAHL PLÄTZE
SAALPLAN
SAALPLAN-
STAPEL
VERKAUFTE
PLÄTZE
KARTEN
VORSTELLUNG
GEFUNDENE
PLÄTZE
SAALPLAN SAALPLAN
WOCHENPLAN
<< finalisiert >>
VERLEIHER
KINO-
MANAGER
WERBE-
AGENTUR BUCHUNGSPLAN
DER WERBUNG
VORGABEN
FÜR FILME
GESAMTDEUTSCHE
BESUCHERZAHLEN
VERFÜGBARKEIT
VON FILMEN
1
6
2
10
5
3
8
4
7
9
11
12
13
14
SAALPLAN
15
BEGINNT
SEINE ARBEIT
AN DEM
ÜBERPRÜFT
VERHANDELT
MIT
FINALISIERT
DEN
ERZEUGT FÜR DIE
NÄCHSTE WOCHE
GELDSUMME KINOKARTEN
BEZAHLTE
KINOKARTEN
FRAGT NACH
FÜR EINE
ÖFFNET
SCHLIESST
AUS DEM
BIETET
AN BEZAHLT
AN
SUCHT
IM IM
MARKIERT
DRUCKT
AUS
ÜBERGIBT
AN
Trigger
Einmal pro Woche
Immer wenn ein
Kunde kommt
Trigger
KASSEN-
MITARBEITER
KINO-
BESUCHER
WOCHENPLAN
<< in Arbeit >>
GEWÜNSCHTE
ANZAHL PLÄTZE
SAALPLAN
SAALPLAN-
STAPEL
VERKAUFTE
PLÄTZE
KARTEN
VORSTELLUNG
GEFUNDENE
PLÄTZE
SAALPLAN SAALPLAN
WOCHENPLAN
<< finalisiert >>
VERLEIHER
KINO-
MANAGER
WERBE-
AGENTUR BUCHUNGSPLAN
DER WERBUNG
VORGABEN
FÜR FILME
GESAMTDEUTSCHE
BESUCHERZAHLEN
VERFÜGBARKEIT
VON FILMEN
1
6
2
10
5
3
8
4
7
9
11
12
13
14
SAALPLAN
15
BEGINNT
SEINE ARBEIT
AN DEM
ÜBERPRÜFT
VERHANDELT
MIT
FINALISIERT
DEN
ERZEUGT FÜR DIE
NÄCHSTE WOCHE
GELDSUMME KINOKARTEN
BEZAHLTE
KINOKARTEN
FRAGT NACH
FÜR EINE
ÖFFNET
SCHLIESST
AUS DEM
BIETET
AN BEZAHLT
AN
SUCHT
IM IM
MARKIERT
DRUCKT
AUS
ÜBERGIBT
AN
Trigger
Einmal pro Woche
Immer wenn ein
Kunde kommt
Abteilung
Kinomanagement
Abteilung
Kartenverkauf
Trigger
KASSEN-
MITARBEITER
KINO-
BESUCHER
WOCHENPLAN
<< in Arbeit >>
GEWÜNSCHTE
ANZAHL PLÄTZE
SAALPLAN
SAALPLAN-
STAPEL
VERKAUFTE
PLÄTZE
KARTEN
VORSTELLUNG
GEFUNDENE
PLÄTZE
SAALPLAN SAALPLAN
WOCHENPLAN
<< finalisiert >>
VERLEIHER
KINO-
MANAGER
WERBE-
AGENTUR BUCHUNGSPLAN
DER WERBUNG
VORGABEN
FÜR FILME
GESAMTDEUTSCHE
BESUCHERZAHLEN
VERFÜGBARKEIT
VON FILMEN
1
6
2
10
5
3
8
4
7
9
11
12
13
14
SAALPLAN
15
BEGINNT
SEINE ARBEIT
AN DEM
ÜBERPRÜFT
VERHANDELT
MIT
FINALISIERT
DEN
ERZEUGT FÜR DIE
NÄCHSTE WOCHE
GELDSUMME KINOKARTEN
BEZAHLTE
KINOKARTEN
FRAGT NACH
FÜR EINE
ÖFFNET
SCHLIESST
AUS DEM
BIETET
AN BEZAHLT
AN
SUCHT
IM IM
MARKIERT
DRUCKT
AUS
ÜBERGIBT
AN
Trigger
Einmal pro Woche
Immer wenn ein
Kunde kommt
Trigger
Informationsfluss
Abteilung
Kinomanagement
Abteilung
Kartenverkauf
KASSEN-
MITARBEITER
KINO-
BESUCHER
WOCHENPLAN
<< in Arbeit >>
GEWÜNSCHTE
ANZAHL PLÄTZE
SAALPLAN
SAALPLAN-
STAPEL
VERKAUFTE
PLÄTZE
KARTEN
VORSTELLUNG
GEFUNDENE
PLÄTZE
SAALPLAN SAALPLAN
WOCHENPLAN
<< finalisiert >>
VERLEIHER
KINO-
MANAGER
WERBE-
AGENTUR BUCHUNGSPLAN
DER WERBUNG
VORGABEN
FÜR FILME
GESAMTDEUTSCHE
BESUCHERZAHLEN
VERFÜGBARKEIT
VON FILMEN
1
6
2
10
5
3
8
4
7
9
11
12
13
14
SAALPLAN
15
BEGINNT
SEINE ARBEIT
AN DEM
ÜBERPRÜFT
VERHANDELT
MIT
FINALISIERT
DEN
ERZEUGT FÜR DIE
NÄCHSTE WOCHE
GELDSUMME KINOKARTEN
BEZAHLTE
KINOKARTEN
FRAGT NACH
FÜR EINE
ÖFFNET
SCHLIESST
AUS DEM
BIETET
AN BEZAHLT
AN
SUCHT
IM IM
MARKIERT
DRUCKT
AUS
ÜBERGIBT
AN
Trigger
TriggerEinmal pro Woche
Immer wenn ein
Kunde kommt
Abteilung
Kinomanagement
Abteilung
Kartenverkauf
WOCHENPLAN
<< ausgedruckt >>
Informationsfluss
Wochenplanungsservice
•FilmInSaalEinplanen
•WerbungZuFilmPlanen
•ErwarteteBesucherzahl
•FinalPläneErzeugen
Kartenverkaufsservice
•ZeitenZuFilmSuchen
•PlätzeSucheInSaal
•PlätzeReservieren
•PlätzeVerkaufen
UI Wochenplanung UI Kartenverkauf UI Wochenplanung UI Kartenverkauf
Wochenplanservice
•ZeitenZuFilmSuchen
•FilmInSaalEinplanen
•WerbungZuFilmPlanen
•ErwarteteBesucherzahl
•FinalPläneErzeugen
Saalplanservice
•PlätzeSucheInSaal
•PlätzeAlsReserviertMark
•PlätzeAlsVerkauftMark
•PläneErzeugen
Bounded Context
Kinomanagement
Bounded Context
Kartenverkauf
Bounded Context
Wochenplan
Bounded Context
Saalplan
Bounded Context
Kinokarte
Bounded Contexts nach Entities
mit synchroner Kopplung
Bounded Contexts nach fachlichen Prozesse
mit asynchroner Kopplung
@cairolali
SIZE MATTERS!
▪ Ein Bounded Context für ein Two-Pizza-Team
✘
@cairolali
UNEVEN MODULES
Ein großer Monolith mit Satelliten
950.860 LOC
84.808 LOC
@cairolali
128 BUILD UNITS MIT ANZAHL KLASSEN
▪ 3 Mio von
9 Mio LOC
▪ 1/3 des
Systems
@cairolali
5.270 KLASSEN IN EINEM ZYKLUS IN EINER BUILDUNIT
24.01.2019 //// Seite 46WPS - Workplace Solutions GmbH
MOB ARCHITECTING – ARCHITEKTURANALYSE IM TEAM
24.01.2019 //// Seite 47WPS - Workplace Solutions GmbH
FACHLICHE ZERLEGUNG: WIE GEHEN WIR VOR?
Refactorings
Analyse +
Diskussion
Maßnahmen
festlegen
Abbildungs-
Vorschrift
Ist-
Architektur
Rekonstruktion
Source-
Code
Fachliche
Module
Bounded
Contexts
Architektur-
alternativen
• Priorisierung der Maßnahmen
• Einplanung in den Entwicklungszyklus
Verletzungen
• Mit den Domänenexperten identifiziert
• Mit Fachsprachen + Prozessanalyse abgeglichen
24.01.2019 //// Seite 48WPS - Workplace Solutions GmbH
MODULITH FIRST
▪Ausschneiden eines MS aus einem Monolithen ist nur möglich, wenn
dieser fachliche modularisiert ist
User Interface
Domain
Application
Fachliches
Modul B
Fachliches
Modul A
So wenig Beziehungen wie möglich!
TechnischeSchichtung
Fachliches
Modul C
24.01.2019 //// Seite 49WPS - Workplace Solutions GmbH
TAKTISCHES UND STRATEGISCHES MODELLIEREN
Strategisches Modellieren (im Großen)
▪ Teile die Domäne in getrennte Bounded Contexts auf
▪ Jeder BC hat seine eigene ubiquitous language und sein eigenes Domänenmodell
Taktisches Modellieren (im Kleinen)
▪ Innerhalb eines Bounded Context
▪ Ubiquitous Language als Grundlage
▪ Building Blocks: Entity, Value Object,
Aggregate, Service, Repository, Factory
24.01.2019 //// Seite 50WPS - Workplace Solutions GmbH
BUILDING BLOCKS = MUSTER FÜR DIE MIKRO ARCHITEKTUR
User Interface
Domain
Application
SchichtungdurchMuster
Bounded Context
Repository
Factory
Model
View
ValueObject
Service
Entity/
Aggregate
Controller
24.01.2019 //// Seite 51WPS - Workplace Solutions GmbH
463 Klassen
aus über 50 Packages
24.01.2019 //// Seite 52WPS - Workplace Solutions GmbH
entities
valueObjects
24.01.2019 //// Seite 53WPS - Workplace Solutions GmbH
entities
valueObjects
24.01.2019 //// Seite 54WPS - Workplace Solutions GmbH
184 Klassen in einem Zyklus
und mehrere Kleine Zyklen
24.01.2019 //// Seite 55WPS - Workplace Solutions GmbH
WAS WIR NICHT BAUEN WOLLEN
✘
ANEMIC DOMAIN MODEL
▪ „blutarme“ fachliche Objekte
▪ Schnittstelle ohne Aussagekraft
▪ aus Gettern/Settern
▪ Viele String Parameter
▪ Eigentliche Fachlichkeit außerhalb
Entities + Value Objects in Services
oder im UI
▪ Viele Util, Helper und Manager Klassen
24.01.2019 //// Seite 56WPS - Workplace Solutions GmbH
ANEMIC → FEHLENDE ROBUSTHEIT
▪ Designschulden
▪ Unklarer, schwer verständlicher Entwurf
▪ Verteilte Fachlichkeit
▪ Copy & Paste - Programmierung
→ Teure Wartung
→ Duplizierter Code
→ Viele Refactorings
→ Schlechte Testbarkeit
24.01.2019 //// Seite 57WPS - Workplace Solutions GmbH
EIN BANKKONTO
public class Account {
private int _balance;
public int getBalance() {
return _balance;
}
public void setBalance(int balance) {
_balance = balance;
}
}
✘
Schlecht: Der
Kontostand kann
auf beliebigen
Wert gesetzt
werden
24.01.2019 //// Seite 58WPS - Workplace Solutions GmbH
EIN BANKKONTO – ERSTES REFACTORING
public class Account {
private int _balance;
public int getBalance() {
return _balance;
}
public void deposit(int amount) {
_balance += amount;
}
public void withdraw(int amount) {
_balance -= amount;
}
}
Besser:
Methoden mit
fachlichem
Verhalten und
Namen
24.01.2019 //// Seite 59WPS - Workplace Solutions GmbH
JA, ABER…
public class Account {
// ...
public void withdraw(int amount) {
_balance -= amount;
}
}
Kann ich einen
Negativen
Betrag
abheben?
In EUR oder
GBP oder … ?
24.01.2019 //// Seite 60WPS - Workplace Solutions GmbH
EIN EIGENER VALUEOBEJCT BETRAG
public class Amount {
private final int _amount;
private final Currency _currency;
public Amount(int amount, Currency currency) {
_amount = amount;
_currency = currency;
}
}
24.01.2019 //// Seite 61WPS - Workplace Solutions GmbH
EIN EIGENER VALUEOBEJCT BETRAG
public class Amount {
private final int _amount;
private final Currency _currency;
public Amount(int amount, Currency currency) {
_amount = amount;
_currency = currency;
}
@Override
public boolean equals(Object other) {
return _amount == ((Amount) other)._amount
&& _currency.equals(((Amount) other)._currency);
}
}
24.01.2019 //// Seite 62WPS - Workplace Solutions GmbH
EIN EIGENER VALUEOBEJCT BETRAG
public class Amount {
private final int _amount;
private final Currency _currency;
public Amount(int amount, Currency currency) {
_amount = amount;
_currency = currency;
}
@Override
public boolean equals(Object other) {
return _amount == ((Amount) other)._amount
&& _currency.equals(((Amount) other)._currency);
}
// hashCode()
}
24.01.2019 //// Seite 63WPS - Workplace Solutions GmbH
EIN EIGENER VALUEOBJECT BETRAG
public class Amount {
private final int _amount;
private final Currency _currency;
public Amount(int amount, Currency currency) {
_amount = amount;
_currency = currency;
}
public Amount add(Amount otherAmount) {
return new Amount(_amount + otherAmount._amount, _currency);
}
}
Der neueTyp hat
richtiges
fachliches
Verhalten
24.01.2019 //// Seite 64WPS - Workplace Solutions GmbH
EIN BANKKONTO – ZWEITES REFACTORING
public class Account {
private Amount _balance;
public Amount getBalance() {
return _balance;
}
public void deposit(Amount amount) {
_balance = _balance.add(amount);
}
public void withdraw(Amount amount) {
_balance = _balance.subtract(amount);
}
}
Jetzt können wir
den Betrags-Typ
verwenden
24.01.2019 //// Seite 65WPS - Workplace Solutions GmbH
DOMÄNEN KLASSEN ZERLEGEN ODER KOPIEREN!
User Interface
Domain
Application
Bounded Context
Model
View
ValueObject
Service
Entity/
Aggregate
Controller
Bounded Context
Model
View
ValueObject
Service
Entity/
Aggregate
Controller
Bounded Context
Model
View
ValueObject
Service
Entity/
Aggregate
Controller
24.01.2019 //// Seite 66WPS - Workplace Solutions GmbH
WO STEHEN WIR?
612.869 LOC
14.756.435 LOC
252.062 LOC
804.093 LOC
543.388 LOC
1.035.668 LOC
486.358 LOC
175.258 LOC
42.311 LOC
193.383 LOC
643.466 LOC
245.754 LOC
2.890.204 LOC
141.696 LOC
512.086 LOC
9.988.363 LOC
200.591 LOC
922.949 LOC
22.658 LOC
663.862 LOC
3.270.188 LOC
1.521.357 LOC
0
2
4
6
8
10
Der MODULARITY MATURITY INDEX (MMI)
@cairolali
MEETUPS
@DDDger
@cairolali
KONFERENZEN
Germanys first DDD conference
Schulungen zu Architektur und Domain-Driven Design
Architekturanalyse mit Ihrem Team
wps.de
24.01.2019 //// Seite 71WPS - Workplace Solutions GmbH
@cairolali
www.llsa.de
@hschwentner

Weitere ähnliche Inhalte

Was ist angesagt?

Domain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroDomain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroFabrício Rissetto
 
Rancher and Kubernetes Best Practices
Rancher and  Kubernetes Best PracticesRancher and  Kubernetes Best Practices
Rancher and Kubernetes Best PracticesAvinash Patil
 
Your Journey to Cloud-Native Begins with DevOps, Microservices, and Containers
Your Journey to Cloud-Native Begins with DevOps, Microservices, and ContainersYour Journey to Cloud-Native Begins with DevOps, Microservices, and Containers
Your Journey to Cloud-Native Begins with DevOps, Microservices, and ContainersAtlassian
 
Google Kubernetes Engine (GKE) deep dive
Google Kubernetes Engine (GKE) deep diveGoogle Kubernetes Engine (GKE) deep dive
Google Kubernetes Engine (GKE) deep diveAkash Agrawal
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationOğuzhan Soykan
 
Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignNaeem Sarfraz
 
Istio : Service Mesh
Istio : Service MeshIstio : Service Mesh
Istio : Service MeshKnoldus Inc.
 
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)Chris Richardson
 
Continuous Delivery to Kubernetes with Jenkins and Helm
Continuous Delivery to Kubernetes with Jenkins and HelmContinuous Delivery to Kubernetes with Jenkins and Helm
Continuous Delivery to Kubernetes with Jenkins and HelmDavid Currie
 
Autoscaling Kubernetes
Autoscaling KubernetesAutoscaling Kubernetes
Autoscaling Kubernetescraigbox
 
Domain Driven Design & Hexagonal Architecture
Domain Driven Design & Hexagonal ArchitectureDomain Driven Design & Hexagonal Architecture
Domain Driven Design & Hexagonal ArchitectureCan Pekdemir
 
Containers vs serverless - Navigating application deployment options
Containers vs serverless - Navigating application deployment optionsContainers vs serverless - Navigating application deployment options
Containers vs serverless - Navigating application deployment optionsDaniel Krook
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introductionwojtek_s
 
Software Craftsmanship
Software CraftsmanshipSoftware Craftsmanship
Software CraftsmanshipSandro Mancuso
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services ArchitectureAraf Karsh Hamid
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To MicroservicesLalit Kale
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignNader Albert
 

Was ist angesagt? (20)

Domain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroDomain Driven Design: Zero to Hero
Domain Driven Design: Zero to Hero
 
Rancher and Kubernetes Best Practices
Rancher and  Kubernetes Best PracticesRancher and  Kubernetes Best Practices
Rancher and Kubernetes Best Practices
 
Your Journey to Cloud-Native Begins with DevOps, Microservices, and Containers
Your Journey to Cloud-Native Begins with DevOps, Microservices, and ContainersYour Journey to Cloud-Native Begins with DevOps, Microservices, and Containers
Your Journey to Cloud-Native Begins with DevOps, Microservices, and Containers
 
Google Kubernetes Engine (GKE) deep dive
Google Kubernetes Engine (GKE) deep diveGoogle Kubernetes Engine (GKE) deep dive
Google Kubernetes Engine (GKE) deep dive
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
 
Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven Design
 
Istio : Service Mesh
Istio : Service MeshIstio : Service Mesh
Istio : Service Mesh
 
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
 
Continuous Delivery to Kubernetes with Jenkins and Helm
Continuous Delivery to Kubernetes with Jenkins and HelmContinuous Delivery to Kubernetes with Jenkins and Helm
Continuous Delivery to Kubernetes with Jenkins and Helm
 
Autoscaling Kubernetes
Autoscaling KubernetesAutoscaling Kubernetes
Autoscaling Kubernetes
 
Why Microservices
Why MicroservicesWhy Microservices
Why Microservices
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Domain Driven Design & Hexagonal Architecture
Domain Driven Design & Hexagonal ArchitectureDomain Driven Design & Hexagonal Architecture
Domain Driven Design & Hexagonal Architecture
 
Containers vs serverless - Navigating application deployment options
Containers vs serverless - Navigating application deployment optionsContainers vs serverless - Navigating application deployment options
Containers vs serverless - Navigating application deployment options
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
Software Craftsmanship
Software CraftsmanshipSoftware Craftsmanship
Software Craftsmanship
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services Architecture
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To Microservices
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 

Ähnlich wie Monolithen mit ddd zerlegen

Its all about the domain honey
Its all about the domain honeyIts all about the domain honey
Its all about the domain honeyCarola Lilienthal
 
Technische Schulden tun weh! Wie man sie erkennt und beseitigt
Technische Schulden tun weh! Wie man sie erkennt und beseitigtTechnische Schulden tun weh! Wie man sie erkennt und beseitigt
Technische Schulden tun weh! Wie man sie erkennt und beseitigtCarola Lilienthal
 
Telefonie und Meetings: Net at Work führt mit Workshops in das Universum von ...
Telefonie und Meetings: Net at Work führt mit Workshops in das Universum von ...Telefonie und Meetings: Net at Work führt mit Workshops in das Universum von ...
Telefonie und Meetings: Net at Work führt mit Workshops in das Universum von ...bhoeck
 
Modulare Baukästen, Modularisierung und Produktplattformen:Vorstellung MB Col...
Modulare Baukästen, Modularisierung und Produktplattformen:Vorstellung MB Col...Modulare Baukästen, Modularisierung und Produktplattformen:Vorstellung MB Col...
Modulare Baukästen, Modularisierung und Produktplattformen:Vorstellung MB Col...Daniel Mund
 
Frank Schlotter, Mag. Christoph Domanig (Active Business Consult – Cenit)
Frank Schlotter, Mag. Christoph Domanig (Active Business Consult – Cenit)Frank Schlotter, Mag. Christoph Domanig (Active Business Consult – Cenit)
Frank Schlotter, Mag. Christoph Domanig (Active Business Consult – Cenit)Praxistage
 
Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)Pierluigi Pugliese
 
In 3 Schritten zur App - So geht Anwendungsentwicklung auf der SAP Business T...
In 3 Schritten zur App - So geht Anwendungsentwicklung auf der SAP Business T...In 3 Schritten zur App - So geht Anwendungsentwicklung auf der SAP Business T...
In 3 Schritten zur App - So geht Anwendungsentwicklung auf der SAP Business T...IBsolution GmbH
 
From pair programming to mob architecting
From pair programming to mob architecting From pair programming to mob architecting
From pair programming to mob architecting Carola Lilienthal
 

Ähnlich wie Monolithen mit ddd zerlegen (20)

Its all about the domain honey
Its all about the domain honeyIts all about the domain honey
Its all about the domain honey
 
VDC Newsletter 2006-12
VDC Newsletter 2006-12VDC Newsletter 2006-12
VDC Newsletter 2006-12
 
VDC Newsletter 2013-07
VDC Newsletter 2013-07VDC Newsletter 2013-07
VDC Newsletter 2013-07
 
VDC Newsletter 2009-10
VDC Newsletter 2009-10VDC Newsletter 2009-10
VDC Newsletter 2009-10
 
VDC Newsletter 2009-02
VDC Newsletter 2009-02VDC Newsletter 2009-02
VDC Newsletter 2009-02
 
VDC Newsletter 2011-10
VDC Newsletter 2011-10VDC Newsletter 2011-10
VDC Newsletter 2011-10
 
Technische Schulden tun weh! Wie man sie erkennt und beseitigt
Technische Schulden tun weh! Wie man sie erkennt und beseitigtTechnische Schulden tun weh! Wie man sie erkennt und beseitigt
Technische Schulden tun weh! Wie man sie erkennt und beseitigt
 
VDC Newsletter 2010-01
VDC Newsletter 2010-01VDC Newsletter 2010-01
VDC Newsletter 2010-01
 
Telefonie und Meetings: Net at Work führt mit Workshops in das Universum von ...
Telefonie und Meetings: Net at Work führt mit Workshops in das Universum von ...Telefonie und Meetings: Net at Work führt mit Workshops in das Universum von ...
Telefonie und Meetings: Net at Work führt mit Workshops in das Universum von ...
 
Modulare Baukästen, Modularisierung und Produktplattformen:Vorstellung MB Col...
Modulare Baukästen, Modularisierung und Produktplattformen:Vorstellung MB Col...Modulare Baukästen, Modularisierung und Produktplattformen:Vorstellung MB Col...
Modulare Baukästen, Modularisierung und Produktplattformen:Vorstellung MB Col...
 
VDC Newsletter 2011-11
VDC Newsletter 2011-11VDC Newsletter 2011-11
VDC Newsletter 2011-11
 
Langlebige architekturen
Langlebige architekturenLanglebige architekturen
Langlebige architekturen
 
VDC Newsletter 2007-10
VDC Newsletter 2007-10VDC Newsletter 2007-10
VDC Newsletter 2007-10
 
Frank Schlotter, Mag. Christoph Domanig (Active Business Consult – Cenit)
Frank Schlotter, Mag. Christoph Domanig (Active Business Consult – Cenit)Frank Schlotter, Mag. Christoph Domanig (Active Business Consult – Cenit)
Frank Schlotter, Mag. Christoph Domanig (Active Business Consult – Cenit)
 
VDC Newsletter 2006-09
VDC Newsletter 2006-09VDC Newsletter 2006-09
VDC Newsletter 2006-09
 
VDC Newsletter 2010-11
VDC Newsletter 2010-11VDC Newsletter 2010-11
VDC Newsletter 2010-11
 
Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)
 
VDC Newsletter 2011-05
VDC Newsletter 2011-05VDC Newsletter 2011-05
VDC Newsletter 2011-05
 
In 3 Schritten zur App - So geht Anwendungsentwicklung auf der SAP Business T...
In 3 Schritten zur App - So geht Anwendungsentwicklung auf der SAP Business T...In 3 Schritten zur App - So geht Anwendungsentwicklung auf der SAP Business T...
In 3 Schritten zur App - So geht Anwendungsentwicklung auf der SAP Business T...
 
From pair programming to mob architecting
From pair programming to mob architecting From pair programming to mob architecting
From pair programming to mob architecting
 

Mehr von Carola Lilienthal

its all about the domain honey! Experiences from 15 years of Domain-Driven De...
its all about the domain honey! Experiences from 15 years of Domain-Driven De...its all about the domain honey! Experiences from 15 years of Domain-Driven De...
its all about the domain honey! Experiences from 15 years of Domain-Driven De...Carola Lilienthal
 
its all about the domain, honey! Experiences from 15 years of Domain-Driven D...
its all about the domain, honey! Experiences from 15 years of Domain-Driven D...its all about the domain, honey! Experiences from 15 years of Domain-Driven D...
its all about the domain, honey! Experiences from 15 years of Domain-Driven D...Carola Lilienthal
 
Resolving technical debt in software architecture
Resolving technical debt in software architectureResolving technical debt in software architecture
Resolving technical debt in software architectureCarola Lilienthal
 
DDD Foundation: Improving legacy
DDD Foundation: Improving legacyDDD Foundation: Improving legacy
DDD Foundation: Improving legacyCarola Lilienthal
 
Its all about the domain honey engl
Its all about the domain honey englIts all about the domain honey engl
Its all about the domain honey englCarola Lilienthal
 
Reducing technical debt in php
Reducing technical debt in phpReducing technical debt in php
Reducing technical debt in phpCarola Lilienthal
 
Its all about the domain honey
Its all about the domain honeyIts all about the domain honey
Its all about the domain honeyCarola Lilienthal
 
Technische Schulden in Architekturen erkennen und beseitigen
Technische Schulden in Architekturen erkennen und beseitigenTechnische Schulden in Architekturen erkennen und beseitigen
Technische Schulden in Architekturen erkennen und beseitigenCarola Lilienthal
 
Große ziele kleine schritte
Große ziele kleine schritteGroße ziele kleine schritte
Große ziele kleine schritteCarola Lilienthal
 
Langlebige Softwarearchitekturen - Der Umgang mit technischen Schulden
Langlebige Softwarearchitekturen - Der Umgang mit technischen SchuldenLanglebige Softwarearchitekturen - Der Umgang mit technischen Schulden
Langlebige Softwarearchitekturen - Der Umgang mit technischen SchuldenCarola Lilienthal
 

Mehr von Carola Lilienthal (13)

its all about the domain honey! Experiences from 15 years of Domain-Driven De...
its all about the domain honey! Experiences from 15 years of Domain-Driven De...its all about the domain honey! Experiences from 15 years of Domain-Driven De...
its all about the domain honey! Experiences from 15 years of Domain-Driven De...
 
its all about the domain, honey! Experiences from 15 years of Domain-Driven D...
its all about the domain, honey! Experiences from 15 years of Domain-Driven D...its all about the domain, honey! Experiences from 15 years of Domain-Driven D...
its all about the domain, honey! Experiences from 15 years of Domain-Driven D...
 
Improving legacy
Improving legacyImproving legacy
Improving legacy
 
Resolving technical debt in software architecture
Resolving technical debt in software architectureResolving technical debt in software architecture
Resolving technical debt in software architecture
 
DDD Foundation: Improving legacy
DDD Foundation: Improving legacyDDD Foundation: Improving legacy
DDD Foundation: Improving legacy
 
The joy of multiple models
The joy of multiple modelsThe joy of multiple models
The joy of multiple models
 
Its all about the domain honey engl
Its all about the domain honey englIts all about the domain honey engl
Its all about the domain honey engl
 
Reducing technical debt in php
Reducing technical debt in phpReducing technical debt in php
Reducing technical debt in php
 
Its all about the domain honey
Its all about the domain honeyIts all about the domain honey
Its all about the domain honey
 
Technische Schulden in Architekturen erkennen und beseitigen
Technische Schulden in Architekturen erkennen und beseitigenTechnische Schulden in Architekturen erkennen und beseitigen
Technische Schulden in Architekturen erkennen und beseitigen
 
Große ziele kleine schritte
Große ziele kleine schritteGroße ziele kleine schritte
Große ziele kleine schritte
 
Technische schulden abbauen
Technische schulden abbauenTechnische schulden abbauen
Technische schulden abbauen
 
Langlebige Softwarearchitekturen - Der Umgang mit technischen Schulden
Langlebige Softwarearchitekturen - Der Umgang mit technischen SchuldenLanglebige Softwarearchitekturen - Der Umgang mit technischen Schulden
Langlebige Softwarearchitekturen - Der Umgang mit technischen Schulden
 

Monolithen mit ddd zerlegen

  • 1. WPS - Workplace Solutions GmbH //// Hans-Henny-Jahnn-Weg 29 //// 22085 HAMBURG Monolithen mit DDD zerlegen Dr. Carola Lilienthal @cairolali cl@wps.de
  • 4.
  • 5. 24.01.2019 //// Seite 7WPS - Workplace Solutions GmbH 5 20 70 150 70 bis 15 Mio bis 5 Mio bis 1 Mio bis 500.000 bis 100.000
  • 6. 463 tangled classes belonging to 10 different components
  • 7. 24.01.2019 //// Seite 11WPS - Workplace Solutions GmbH
  • 8. 24.01.2019 //// Seite 12WPS - Workplace Solutions GmbH MODULARITY MATURITY INDEX (MMI) 612.869 LOC 14.756.435 LOC 252.062 LOC 804.093 LOC 543.388 LOC 1.035.668 LOC 486.358 LOC 175.258 LOC 42.311 LOC 193.383 LOC 643.466 LOC 245.754 LOC 2.890.204 LOC 141.696 LOC 512.086 LOC 9.988.363 LOC 200.591 LOC 922.949 LOC 22.658 LOC 663.862 LOC 3.270.188 LOC 1.521.357 LOC 0 2 4 6 8 10
  • 9.
  • 10. Team Head Team Tail Team Body Team Leg
  • 11. Team Head Team Tail Team Body Team Leg
  • 12. Team Head Team Tail Team Body Team Leg
  • 13. Team Head Team Tail Team Body Team Leg
  • 14. Team Emma Team Berta Team Erna Team Lisl
  • 15. 24.01.2019 //// Seite 19WPS - Workplace Solutions GmbH WAS IST DOMAIN-DRIVEN DESIGN? ▪ Eine Herangehensweise an die Entwicklung von Software, die dafür sorgt, dass die Software tief in der Domäne verwurzelt ist. ▪ Das gelingt durch die Umsetzung der Ubiquitous Language in mehreren kontextbezogenen Domänenmodellen ▪ Der Kontext dieser Modelle heißt Bounded Context Software Domäne
  • 16. 24.01.2019 //// Seite 20WPS - Workplace Solutions GmbH LIVING IN A BOX Setze explizite Grenzen … ▪ Ein Team pro fachlicher Subdomäne ▪ Erhalte die Konsistenz innerhalb der Grenzen ▪ Keine Ablenkung durch äußere Angelegenheiten → Freie Gestaltung eines Teilmodells durch ein Team ▪ Kenne die Restriktionen ▪ Bleibe innerhalb der Modellgrenzen ▪ Arbeite schnell in Deinen Grenzen
  • 17. 24.01.2019 //// Seite 21WPS - Workplace Solutions GmbH JEDER BOUNDED CONTEXT HAT SEIN EIGENES MODELL ZIEL: ▪ Jedes Team kann an seinem eigenen Domänen-Modell arbeiten ▪ Man kennt seine Grenzen ▪ Man bleibt in seinen Grenzen
  • 18. 24.01.2019 //// Seite 22WPS - Workplace Solutions GmbH KLASSISCHES DOMÄNENMODELL – REALITÄT ▪ Mehrere vermischte mentale Modelle ▪ Unbeherrschbare Komplexität ▪ Abhängigkeiten unter den Teams Foto: CMS Higgs-even/Wikipedia/CC-BY-SA-3.0
  • 19.
  • 20.
  • 21.
  • 23. 24.01.2019 //// Seite 27WPS - Workplace Solutions GmbH JEDER BOUNDED CONTEXT HAT SEIN EIGENES MODELL ZIEL: ▪ Jedes Team kann an seinem eigenen Domänen-Modell arbeiten ▪ Man kennt seine Grenzen ▪ Man bleibt in seinen Grenzen
  • 24. 463 tangled classes belonging to 10 different components
  • 25. 24.01.2019 //// Seite 30WPS - Workplace Solutions GmbH MODULITH FIRST ▪Ausschneiden eines MS aus einem Monolithen ist nur möglich, wenn dieser fachliche modularisiert ist User Interface Domain Application Fachliches Modul B Fachliches Modul A So wenig Beziehungen wie möglich! TechnischeSchichtung Fachliches Modul C
  • 26. 24.01.2019 //// Seite 32WPS - Workplace Solutions GmbH WIE SCHNEIDE ICH MEINE DOMÄNE? ▪ Nach Abteilungen in der Organisation bzw. Gruppen von Domänenexperten ▪ Nach Unterschieden in der Verwendung/Definition von Schlüsselkonzepten in der Domäne ▪ Nach Grenzen im Geschäftsprozess, die die Domänenexperten beschreiben ▪ Information läuft in eine Richtung ▪ Prozesse werden in unterschiedlichen Rhythmen ausgeführt ▪ Prozesse werden von verschiedenen Triggern ausgelöst.
  • 27. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN
  • 28. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Trigger
  • 29. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Einmal pro Woche Trigger
  • 30. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Einmal pro Woche Immer wenn ein Kunde kommt Trigger
  • 31. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Einmal pro Woche Immer wenn ein Kunde kommt Abteilung Kinomanagement Abteilung Kartenverkauf Trigger
  • 32. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Einmal pro Woche Immer wenn ein Kunde kommt Trigger Informationsfluss Abteilung Kinomanagement Abteilung Kartenverkauf
  • 33. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger TriggerEinmal pro Woche Immer wenn ein Kunde kommt Abteilung Kinomanagement Abteilung Kartenverkauf WOCHENPLAN << ausgedruckt >> Informationsfluss
  • 34. Wochenplanungsservice •FilmInSaalEinplanen •WerbungZuFilmPlanen •ErwarteteBesucherzahl •FinalPläneErzeugen Kartenverkaufsservice •ZeitenZuFilmSuchen •PlätzeSucheInSaal •PlätzeReservieren •PlätzeVerkaufen UI Wochenplanung UI Kartenverkauf UI Wochenplanung UI Kartenverkauf Wochenplanservice •ZeitenZuFilmSuchen •FilmInSaalEinplanen •WerbungZuFilmPlanen •ErwarteteBesucherzahl •FinalPläneErzeugen Saalplanservice •PlätzeSucheInSaal •PlätzeAlsReserviertMark •PlätzeAlsVerkauftMark •PläneErzeugen Bounded Context Kinomanagement Bounded Context Kartenverkauf Bounded Context Wochenplan Bounded Context Saalplan Bounded Context Kinokarte Bounded Contexts nach Entities mit synchroner Kopplung Bounded Contexts nach fachlichen Prozesse mit asynchroner Kopplung
  • 35. @cairolali SIZE MATTERS! ▪ Ein Bounded Context für ein Two-Pizza-Team ✘
  • 36. @cairolali UNEVEN MODULES Ein großer Monolith mit Satelliten 950.860 LOC 84.808 LOC
  • 37. @cairolali 128 BUILD UNITS MIT ANZAHL KLASSEN ▪ 3 Mio von 9 Mio LOC ▪ 1/3 des Systems
  • 38. @cairolali 5.270 KLASSEN IN EINEM ZYKLUS IN EINER BUILDUNIT
  • 39. 24.01.2019 //// Seite 46WPS - Workplace Solutions GmbH MOB ARCHITECTING – ARCHITEKTURANALYSE IM TEAM
  • 40. 24.01.2019 //// Seite 47WPS - Workplace Solutions GmbH FACHLICHE ZERLEGUNG: WIE GEHEN WIR VOR? Refactorings Analyse + Diskussion Maßnahmen festlegen Abbildungs- Vorschrift Ist- Architektur Rekonstruktion Source- Code Fachliche Module Bounded Contexts Architektur- alternativen • Priorisierung der Maßnahmen • Einplanung in den Entwicklungszyklus Verletzungen • Mit den Domänenexperten identifiziert • Mit Fachsprachen + Prozessanalyse abgeglichen
  • 41. 24.01.2019 //// Seite 48WPS - Workplace Solutions GmbH MODULITH FIRST ▪Ausschneiden eines MS aus einem Monolithen ist nur möglich, wenn dieser fachliche modularisiert ist User Interface Domain Application Fachliches Modul B Fachliches Modul A So wenig Beziehungen wie möglich! TechnischeSchichtung Fachliches Modul C
  • 42. 24.01.2019 //// Seite 49WPS - Workplace Solutions GmbH TAKTISCHES UND STRATEGISCHES MODELLIEREN Strategisches Modellieren (im Großen) ▪ Teile die Domäne in getrennte Bounded Contexts auf ▪ Jeder BC hat seine eigene ubiquitous language und sein eigenes Domänenmodell Taktisches Modellieren (im Kleinen) ▪ Innerhalb eines Bounded Context ▪ Ubiquitous Language als Grundlage ▪ Building Blocks: Entity, Value Object, Aggregate, Service, Repository, Factory
  • 43. 24.01.2019 //// Seite 50WPS - Workplace Solutions GmbH BUILDING BLOCKS = MUSTER FÜR DIE MIKRO ARCHITEKTUR User Interface Domain Application SchichtungdurchMuster Bounded Context Repository Factory Model View ValueObject Service Entity/ Aggregate Controller
  • 44. 24.01.2019 //// Seite 51WPS - Workplace Solutions GmbH 463 Klassen aus über 50 Packages
  • 45. 24.01.2019 //// Seite 52WPS - Workplace Solutions GmbH entities valueObjects
  • 46. 24.01.2019 //// Seite 53WPS - Workplace Solutions GmbH entities valueObjects
  • 47. 24.01.2019 //// Seite 54WPS - Workplace Solutions GmbH 184 Klassen in einem Zyklus und mehrere Kleine Zyklen
  • 48. 24.01.2019 //// Seite 55WPS - Workplace Solutions GmbH WAS WIR NICHT BAUEN WOLLEN ✘ ANEMIC DOMAIN MODEL ▪ „blutarme“ fachliche Objekte ▪ Schnittstelle ohne Aussagekraft ▪ aus Gettern/Settern ▪ Viele String Parameter ▪ Eigentliche Fachlichkeit außerhalb Entities + Value Objects in Services oder im UI ▪ Viele Util, Helper und Manager Klassen
  • 49. 24.01.2019 //// Seite 56WPS - Workplace Solutions GmbH ANEMIC → FEHLENDE ROBUSTHEIT ▪ Designschulden ▪ Unklarer, schwer verständlicher Entwurf ▪ Verteilte Fachlichkeit ▪ Copy & Paste - Programmierung → Teure Wartung → Duplizierter Code → Viele Refactorings → Schlechte Testbarkeit
  • 50. 24.01.2019 //// Seite 57WPS - Workplace Solutions GmbH EIN BANKKONTO public class Account { private int _balance; public int getBalance() { return _balance; } public void setBalance(int balance) { _balance = balance; } } ✘ Schlecht: Der Kontostand kann auf beliebigen Wert gesetzt werden
  • 51. 24.01.2019 //// Seite 58WPS - Workplace Solutions GmbH EIN BANKKONTO – ERSTES REFACTORING public class Account { private int _balance; public int getBalance() { return _balance; } public void deposit(int amount) { _balance += amount; } public void withdraw(int amount) { _balance -= amount; } } Besser: Methoden mit fachlichem Verhalten und Namen
  • 52. 24.01.2019 //// Seite 59WPS - Workplace Solutions GmbH JA, ABER… public class Account { // ... public void withdraw(int amount) { _balance -= amount; } } Kann ich einen Negativen Betrag abheben? In EUR oder GBP oder … ?
  • 53. 24.01.2019 //// Seite 60WPS - Workplace Solutions GmbH EIN EIGENER VALUEOBEJCT BETRAG public class Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } }
  • 54. 24.01.2019 //// Seite 61WPS - Workplace Solutions GmbH EIN EIGENER VALUEOBEJCT BETRAG public class Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } @Override public boolean equals(Object other) { return _amount == ((Amount) other)._amount && _currency.equals(((Amount) other)._currency); } }
  • 55. 24.01.2019 //// Seite 62WPS - Workplace Solutions GmbH EIN EIGENER VALUEOBEJCT BETRAG public class Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } @Override public boolean equals(Object other) { return _amount == ((Amount) other)._amount && _currency.equals(((Amount) other)._currency); } // hashCode() }
  • 56. 24.01.2019 //// Seite 63WPS - Workplace Solutions GmbH EIN EIGENER VALUEOBJECT BETRAG public class Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } public Amount add(Amount otherAmount) { return new Amount(_amount + otherAmount._amount, _currency); } } Der neueTyp hat richtiges fachliches Verhalten
  • 57. 24.01.2019 //// Seite 64WPS - Workplace Solutions GmbH EIN BANKKONTO – ZWEITES REFACTORING public class Account { private Amount _balance; public Amount getBalance() { return _balance; } public void deposit(Amount amount) { _balance = _balance.add(amount); } public void withdraw(Amount amount) { _balance = _balance.subtract(amount); } } Jetzt können wir den Betrags-Typ verwenden
  • 58. 24.01.2019 //// Seite 65WPS - Workplace Solutions GmbH DOMÄNEN KLASSEN ZERLEGEN ODER KOPIEREN! User Interface Domain Application Bounded Context Model View ValueObject Service Entity/ Aggregate Controller Bounded Context Model View ValueObject Service Entity/ Aggregate Controller Bounded Context Model View ValueObject Service Entity/ Aggregate Controller
  • 59. 24.01.2019 //// Seite 66WPS - Workplace Solutions GmbH WO STEHEN WIR? 612.869 LOC 14.756.435 LOC 252.062 LOC 804.093 LOC 543.388 LOC 1.035.668 LOC 486.358 LOC 175.258 LOC 42.311 LOC 193.383 LOC 643.466 LOC 245.754 LOC 2.890.204 LOC 141.696 LOC 512.086 LOC 9.988.363 LOC 200.591 LOC 922.949 LOC 22.658 LOC 663.862 LOC 3.270.188 LOC 1.521.357 LOC 0 2 4 6 8 10 Der MODULARITY MATURITY INDEX (MMI)
  • 62. Schulungen zu Architektur und Domain-Driven Design Architekturanalyse mit Ihrem Team wps.de
  • 63. 24.01.2019 //// Seite 71WPS - Workplace Solutions GmbH @cairolali www.llsa.de @hschwentner