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

Monolithen mit ddd zerlegen

  • 1.
    WPS - WorkplaceSolutions GmbH //// Hans-Henny-Jahnn-Weg 29 //// 22085 HAMBURG Monolithen mit DDD zerlegen Dr. Carola Lilienthal @cairolali cl@wps.de
  • 2.
  • 3.
  • 5.
    24.01.2019 //// Seite7WPS - 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 classesbelonging to 10 different components
  • 7.
    24.01.2019 //// Seite11WPS - Workplace Solutions GmbH
  • 8.
    24.01.2019 //// Seite12WPS - 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
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
    24.01.2019 //// Seite19WPS - 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 //// Seite20WPS - 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 //// Seite21WPS - 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 //// Seite22WPS - 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
  • 22.
  • 23.
    24.01.2019 //// Seite27WPS - 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 classesbelonging to 10 different components
  • 25.
    24.01.2019 //// Seite30WPS - 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 //// Seite32WPS - 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 UIKartenverkauf 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! ▪ EinBounded Context für ein Two-Pizza-Team ✘
  • 36.
    @cairolali UNEVEN MODULES Ein großerMonolith mit Satelliten 950.860 LOC 84.808 LOC
  • 37.
    @cairolali 128 BUILD UNITSMIT ANZAHL KLASSEN ▪ 3 Mio von 9 Mio LOC ▪ 1/3 des Systems
  • 38.
    @cairolali 5.270 KLASSEN INEINEM ZYKLUS IN EINER BUILDUNIT
  • 39.
    24.01.2019 //// Seite46WPS - Workplace Solutions GmbH MOB ARCHITECTING – ARCHITEKTURANALYSE IM TEAM
  • 40.
    24.01.2019 //// Seite47WPS - 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 //// Seite48WPS - 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 //// Seite49WPS - 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 //// Seite50WPS - 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 //// Seite51WPS - Workplace Solutions GmbH 463 Klassen aus über 50 Packages
  • 45.
    24.01.2019 //// Seite52WPS - Workplace Solutions GmbH entities valueObjects
  • 46.
    24.01.2019 //// Seite53WPS - Workplace Solutions GmbH entities valueObjects
  • 47.
    24.01.2019 //// Seite54WPS - Workplace Solutions GmbH 184 Klassen in einem Zyklus und mehrere Kleine Zyklen
  • 48.
    24.01.2019 //// Seite55WPS - 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 //// Seite56WPS - 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 //// Seite57WPS - 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 //// Seite58WPS - 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 //// Seite59WPS - 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 //// Seite60WPS - 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 //// Seite61WPS - 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 //// Seite62WPS - 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 //// Seite63WPS - 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 //// Seite64WPS - 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 //// Seite65WPS - 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 //// Seite66WPS - 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)
  • 60.
  • 61.
  • 62.
    Schulungen zu Architekturund Domain-Driven Design Architekturanalyse mit Ihrem Team wps.de
  • 63.
    24.01.2019 //// Seite71WPS - Workplace Solutions GmbH @cairolali www.llsa.de @hschwentner