Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Domain-Driven Design – Unterlagen Transformatio...

Domain-Driven Design – Unterlagen Transformationstag

Avatar for WPS – Workplace Solutions

WPS – Workplace Solutions

January 01, 2020
Tweet

More Decks by WPS – Workplace Solutions

Other Decks in Programming

Transcript

  1. WPS – Workplace Solutions GmbH @ca(i)rolali 2015/17/19/24 2017 2021/23 2023

    Deutsch Englisch Deutsch (Englisch) Deutsch Englisch Deutsch Englisch
  2. WPS – Workplace Solutions GmbH DOMAIN-DRIVEN DESIGN Context Map Bounded

    Contexts Microservices → Strategisches Design Dev Team
  3. WPS – Workplace Solutions GmbH 1.Schritt: Wiederentdecken der Fachdomäne 2.Schritt:

    Modellierung der fachlichen Soll-Architektur 3.Schritt: Abgleich Ist- mit Soll-Architektur 4.Schritt: Priorisieren und Umbaumen Domain-Driven Transformation
  4. WPS – Workplace Solutions GmbH Kunde Verkäufer Vertrag 3 Risikomanager

    1 Auto 2 Leasing Rate Vertrag 1. Schritt: Wiederentdecken der Fachdomäne
  5. WPS – Workplace Solutions GmbH Kunde Verkäufer Vertrag 3 Risikomanager

    Vertrag 4 Vertrag 7 1 Auto 5 Risiko 8 Auto 6 Rückkaufswert value 2 Leasing Rate Vertrag 1. Schritt: Wiederentdecken der Fachdomäne
  6. WPS – Workplace Solutions GmbH Kunde Verkäufer Vertrag 3 Risikomanager

    Vertrag 4 Vertrag 7 1 Auto 5 Risiko 8 Auto 6 Rückkaufswert value 2 Leasing Rate Vertrag Verkauf Risiko- bewertung 2. Schritt: Modellierung der fachlichen Soll-Architektur
  7. WPS – Workplace Solutions GmbH Risiko- bewertung Zahlung Verkauf 2.

    Schritt: Modellierung der fachlichen Soll-Architektur
  8. WPS – Workplace Solutions GmbH Modul B Modul A Modul

    C 3. Schritt : Abgleich Ist- mit Soll-Architektur Unsere Software Context Map Zahlung Verkauf Risikobewertung US US DS DS Supplier Customer Conformist
  9. WPS – Workplace Solutions GmbH 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 The Modularity Maturity Index (MMI)
  10. WPS – Workplace Solutions GmbH 3. Schritt : Abgleich Ist-

    mit Soll-Architektur Structure101 Lattix TeamScale Sonargraph
  11. WPS – Workplace Solutions GmbH MMI 10 → perfekte modulare

    Architektur: hohe Kohäsion & lose Kopplung Modul B Modul A Modul C User Interface User Interface User Interface Domain Model Application Domain Model Application Domain Model Application Lose Kopplung = So wenig Kopplung wie möglich!
  12. WPS – Workplace Solutions GmbH MMI und typische Architekturen Big

    Ball of Mud Technische Schichtung Domain-Driven Module 0 2 4 6 8 10
  13. WPS – Workplace Solutions GmbH MMI und typische Architekturen Big

    Ball of Mud Technische Schichtung Domain-Driven Module 0 2 4 6 8 10 1. Technische DDT: Technisch stabilisieren 2. Taktische DDT: Fachlichkeit stärken
  14. WPS – Workplace Solutions GmbH One big ball of mud

    → 1. Technische DDT, 2. Taktische DDT Domain Model Unser System User Interface Application
  15. WPS – Workplace Solutions GmbH MMI 0-4 → Technische DDT:

    Technisches Stabilisieren Security + Infrastructure: niedrig Bugs: viele Design: schlecht Modularität: schlecht • Build und Deployment automatisieren • Frameworks und Libraries updaten • Fehlerresillienz verbessern • Testabdeckung erhöhen Modularität: schlecht Design: schlecht Security + Infrastructure: höher Bugs: weniger
  16. WPS – Workplace Solutions GmbH MMI 0-4 → Taktische DDT:

    Fachlichkeit stärken Security + Infrastructure: höher Bugs: weniger Design: schlecht Modularität: schlecht • Fachliche Modellierung anreichern • Value Objects einführen • Design by Contract einführen • Zyklen und Anhängigkeiten reduzieren • Vererbung reduzieren Modularität: schlecht Design: besser Security + Infrastructure: höher Bugs: weniger
  17. WPS – Workplace Solutions GmbH MMI und typische Architekturen Big

    Ball of Mud Technische Schichtung Domain-Driven Module 0 2 4 6 8 10 1. Technische DDT: Technisch stabilisieren 2. Taktische DDT: Fachlichkeit stärken Weg 1: 1. Taktische DDT: Fachlichkeit stärken 2. Strategische DDT Weg 2: 1. Strategische DDT 2. Taktische DDT: Fachlichkeit stärken
  18. WPS – Workplace Solutions GmbH Ein großes Domänenmodell → Weg1

    Module B Module A Module C User Interface User Interface User Interface Domain Model Application Application Application Unser System
  19. Container Ab-, Aufladen per LKW und Zollabfertigung von Containern Anmelden

    von Containern vor ihrer Ankunft per LKW, Zug oder Schiff Einlagern und Umlagern durch Kräne und andere Fahrzeuge, die die Container im Yard bewegen Be- und Entladen vom Containerschiff
  20. WPS – Workplace Solutions GmbH Bild 215 LKW Anlieferung Große

    Domänenklassen Container Lagerverwaltung Schiffsladung Präsentation Applikation Präsentation Applikation Präsentation Applikation
  21. WPS – Workplace Solutions GmbH Bild 216 Schiffsladung Lagerverwaltung LKW

    Lieferung Container Container Präsentation Applikation Präsentation Applikation Präsentation Applikation Container
  22. WPS – Workplace Solutions GmbH MMI 4-8 → Weg 1:

    1) Taktische DDT: Fachlichkeit stärken Security + Infrastructure: höher Bugs: weniger Design: schlecht Modularität: schlecht • Fachliche Modellierung anreichern • Value Objects einführen • Design by Contract einführen • Zyklen und Anhängigkeiten reduzieren • Vererbung reduzieren Modularität: schlecht Design: besser Security + Infrastructure: höher Bugs: weniger
  23. WPS – Workplace Solutions GmbH Security + Infrastructure: höher Bugs:

    weniger Design: besser Modularität: schlecht • Schritt 1: Wiederentdecken der Fachdomäne mit DST und ES • Schritt 2: Modellieren der fachlichen Zielarchitektur • Schritt 3: Abgleich von Ist- und Soll-Architektur • Schritt 4: Prioritisierung und Durchführung der Umbaumaßnahme MMI 4-8 → Weg 1: 2) Strategische DDT Modularität: besser Design: besser Security + Infrastructure: höher Bugs: weniger
  24. WPS – Workplace Solutions GmbH Mehrere Domänenmodelle → Weg 2:

    Strategische DDT Module B Module A Module C User Interface User Interface User Interface Domain Model Application Domain Model Application Domain Model Application Unser System
  25. WPS – Workplace Solutions GmbH Security + Infrastructure: höher Bugs:

    weniger Modularität: schlecht • Schritt 1: Wiederentdecken der Fachdomäne mit DST und ES • Schritt 2: Modellieren der fachlichen Zielarchitektur • Schritt 3: Abgleich von Ist- und Soll-Architektur • Schritt 4: Prioritisierung und Durchführung der Umbaumaßnahme MMI 4-8 → Weg 2: 1) Strategische DDT Modularität: besser Security + Infrastructure: höher Bugs: weniger Design: schlecht Design: schlecht
  26. WPS – Workplace Solutions GmbH Security + Infrastructure: höher Bugs:

    weniger Modularität: schlecht MMI 4-8 → Weg 2: 2) Taktisches DDT: Fachlichkeit stärken Modularität: besser Security + Infrastructure: höher Bugs: weniger Design: schlecht Design: schlecht • Fachliche Modellierung anreichern • Value Objects einführen • Design by Contract einführen • Zyklen und Anhängigkeiten reduzieren • Vererbung reduzieren
  27. WPS – Workplace Solutions GmbH MMI und typische Architekturen Big

    Ball of Mud Technische Schichtung Domain-Driven Module 0 2 4 6 8 10 1. Technische DDT: Technisch stabilisieren 2. Taktische DDT: Fachlichkeit stärken Strategisches DDT: Die vier Schritte Weg 1: 1. Taktische DDT: Fachlichkeit stärken 2. Strategische DDT Weg 2: 1. Strategische DDT 2. Taktische DDT: Fachlichkeit stärken
  28. WPS – Workplace Solutions GmbH Security + Infrastructure: höher Bugs:

    weniger Design: besser Modularität: schlecht • Schritt 1: Wiederentdecken der Fachdomäne mit DST und ES • Schritt 2: Modellieren der fachlichen Zielarchitektur • Schritt 3: Abgleich von Ist- und Soll-Architektur • Schritt 4: Prioritisierung und Durchführung der Umbaumaßnahme MMI 8-10 → Strategische DDT Modularität: besser Design: besser Security + Infrastructure: höher Bugs: weniger
  29. WPS – Workplace Solutions GmbH 1.Schritt: Wiederentdecken der Fachdomäne 2.Schritt:

    Modellierung der fachlichen Soll-Architektur 3.Schritt: Abgleich Ist- mit Soll-Architektur 4.Schritt: Priorisieren und Umbaumen Domain-Driven Transformation
  30. WPS – Workplace Solutions GmbH Langlebige Softwarearchitektur Lange Nutzungsdauer →

    Investition zahlen sich aus Gute Legacy = wenig technische Schulden Möglichst geringe Wartungs- und Erweiterungskosten
  31. WPS – Workplace Solutions GmbH Technische Schulden entstehen, wenn bewusst

    oder unbewusst falsche oder suboptimale technische Entscheidungen getroffen werden. [Cunningham 1992]
  32. WPS – Workplace Solutions GmbH Ursachen für technische Schulden Kein

    Wissen über Softwarearchitektur Komplexität und Größe von Software Unverständnis des Managements und der Kunden für Individual- softwareentwicklung
  33. WPS – Workplace Solutions GmbH 5 20 70 150 70

    15 Mio 5 Mio 1 Mio 500.000 100.000
  34. WPS – Workplace Solutions GmbH 1. HANDS-ON: LEGACY CODE Legacy

    verstehen Schaut Euch den ausgedruckten Sourcecode an! Wo findet Ihr hier technische Schulden? Welche Refactorings sind aus Eurer Sicht sinnvoll?
  35. WPS – Workplace Solutions GmbH 1.Schritt: Wiederentdecken der Fachdomäne 2.Schritt:

    Modellierung der fachlichen Soll-Architektur 3.Schritt : Abgleich Ist- mit Soll-Architektur 4.Schritt: Priorisieren und Umbaumen Domain-Driven Transformation
  36. WPS – Workplace Solutions GmbH 1.Schritt: Wiederentdecken der Fachdomäne 2.Schritt:

    Modellierung der fachlichen Soll-Architektur 3.Schritt : Abgleich Ist- mit Soll-Architektur 4.Schritt: Priorisieren und Umbaumen Domain-Driven Transformation
  37. WPS – Workplace Solutions GmbH WIE SCHNEIDE ICH MEINE 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. Nach Unterschieden in der Verwendung und Definition von Schlüsselkonzepten in der Domäne Nach Abteilungen in der Organisation bzw. Gruppen von Domänenexperten
  38. WPS – Workplace Solutions GmbH Jedes Team kennt: Seine Grenzen

    Die anderen Bounded Contexts Die Beziehungen zwischen den Bounded Contexts CONTEXT MAP Bounded Context 3 Bounded Context 1 Bounded Context 2
  39. WPS – Workplace Solutions GmbH STRATEGISCHES DESIGN Finde die Subdomänen

    in der Domäne Zerlege die Software entsprechend in bounded contexts, die Grenzen bilden für domain-orientierte Teile in der Software and in der Teamorganisation Ziel: Jedes Team ist Experte für eine Subdomäne Domain Software System Bounded Context A Bounded Context B Team A Team B Bounded Context C Team C Subdomain A Subdomain B Subdomain C
  40. WPS – Workplace Solutions GmbH MODELS IN BOUNDED CONTEXTS ➔

    Domänen müssen in Subdomänen mit kleineren Modellen aufgeteilt warden ▪ Separate Modelle ▪ erlauben unabhängige Änderungen ▪ setzen eine kleinere Menge von Anforderungen um (hohe Kohäsion) ▪ definieren klare Grenzen (lose Kopplung) ➔ Jede Subdomäne sollte ein Modell enthalten, das so klein ist, dass es von einem Team beherrscht werden kann.
  41. WPS – Workplace Solutions GmbH 2. HANDS-ON: FACHDOMÄNE WIEDERENTDECKEN Domain

    Story verstehen + Subdomänen finden Installiert Visual Code (oder ähnliches) Legt ein neues Projekt an aus https://github.com/lilienth/ddd-banking-example Geht auf die Webseite von egon.io Öffnet die Domain Story aus Hands-on Legacy Code/domainstory Überlegt Euch mögliche Subdomänen Zeichnet eine Context Map
  42. WPS – Workplace Solutions GmbH 1.Schritt: Wiederentdecken der Fachdomäne 2.Schritt:

    Modellierung der fachlichen Soll-Architektur 3.Schritt : Abgleich Ist- mit Soll-Architektur 4.Schritt: Priorisieren und Umbaumen Domain-Driven Transformation
  43. WPS – Workplace Solutions GmbH Metrik-Tools vermessen die Komplexität des

    Sourcecodes: Größen von Methoden, Klassen, Packages Testabdeckung Zyklomatische Komplexität Duplizierter Code EINSATZ VON TOOLS Architekturanalyse-Tools analysieren die Komplexität des Design, der Architektur: Schichtenverletzungen Zyklen zwischen Modulen, Klassen, Packages Abhängigkeiten zwischen Modulen, Klassen Kohäsion und Kopplung
  44. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata
  45. WPS – Workplace Solutions GmbH public class XYManager { void

    registerService(Service s)… Service getService(String n)... void initializeServiceRegistry()… void initializeEventQueue()… void sendEvent(Event event)… void initializePrinterQueue()… void printDocument(Doc d)…}
  46. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata Gut strukturierte Architektur Modularität
  47. WPS – Workplace Solutions GmbH MODULARITÄT Hohe Kohäsion + lose

    Kopplung Separation of Concerns Single Responsibility Principle
  48. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata Gut strukturierte Architektur Modularität
  49. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata Gut strukturierte Architektur Modularität Schichtung
  50. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata Gut strukturierte Architektur Modularität Schichtung Musterkonsistenz
  51. WPS – Workplace Solutions GmbH MUSTER HELFEN UNS SCHNELL ZU

    SEIN Domain Module Model View Controller ValueObject Service BusinessObject
  52. WPS – Workplace Solutions GmbH FALSCHE MUSTER STOPPEN DEN FLOW

    Domain Module Model View Controller ValueObject Service BusinessObject Factory ✓ createBusinessObject() ✓ createValueObject() × calculate(BO) × process(BO)
  53. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata Gut strukturierte Architektur Modularität Schichtung Musterkonsistenz
  54. WPS – Workplace Solutions GmbH ZWEI DIMENSIONEN IN DER ARCHITKETUR

    Technical layering Domain layering Drei Verletzungen, die leicht zu beheben sind Dieselbe Komponenten wie links Eine Komponente verursacht viele Probleme
  55. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata Gut strukturierte Architektur Modularität Schichtung Musterkonsistenz
  56. WPS – Workplace Solutions GmbH GRÖSSEN VON KLASSEN UND METHODEN

    Typische Metriken: LOC pro Methode, Klasse, Package, Modul Duplicated Code Cyclomatic complexity ▪ Ist das System ausgewogen auf den verschiedenen Ebenen? ▪ Welche Code-Teile fallen wegen ihrer Größe besonders auf? Anti-Pattern „Godclass“
  57. WPS – Workplace Solutions GmbH 128 BUILD UNITS UND DIE

    ANZAHL DER KLASSEN ▪ 3 Mio von 9 Mio LOC ▪ 1/3 des System
  58. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata Gut strukturierte Architektur Modularität Schichtung Musterkonsistenz
  59. WPS – Workplace Solutions GmbH User Interface Domain Application Domain

    Module Domain Module Domain Module Model View Controller ValueObject Service Entity Layering by pattern
  60. WPS – Workplace Solutions GmbH MUSTERKONSISTENZ ☺ 90% des Sourcecodes

    kann Mustern zugeordnet werden ☺ 0,1% Verletzungen in den Musterbeziehungen Eventer Processes Service
  61. WPS – Workplace Solutions GmbH GUT STRUKTURIERTE ARCHITEKTUR = ZEITERSPARNIS!

    Kognitive Mechanismen Hierarchien Chunking Schemata Modularität Schichtung Musterkonsistenz → Konsistente und einheitliche Muster → Mustersprache → Zyklenfreiheit auf allen Ebenen der Architektur → Kohäsion → Kopplung → Größe → Schnittstellen
  62. WPS – Workplace Solutions GmbH Kostenfreie Werkzeuge • JQAssistant •

    SonarQube: • Leitstand für Qualitätsmetriken • Plattform für vielfältige Plugins • JDepend: • wenige Metriken • einfache Abhängigkeitsanalyse • JDepend + Google Architecture Rules: • einfache Architekturbeschreibung • Ndepend/CDepend: • Metriken • Abhängigkeitsanalyse • XRadar: • Analyse von Java-Projekten via maven • Reports bezüglich Komplexität und Architekturverletzungen • Moose • Code City
  63. WPS – Workplace Solutions GmbH Kommerzielle Produkte Axivion Bauhaus: Java,

    C#, C/C++, Ada, VB und Cobol Lattix: Java, .Net, C/C++, Ada, Delphi und DB-Systeme Structure101: Java, C++, Ada Sotograph und Sonargraph: Java, C#, C/C++, ABAP, PHP Teamscale: C#, Java Seerene: Java, C#, C/C++, ABAP
  64. WPS – Workplace Solutions GmbH MMI und typische Architekturen Big

    Ball of Mud Technische Schichtung Domain-Driven Module 0 2 4 6 8 10 1. Technische DDT: Technisch stabilisieren 2. Taktische DDT: Fachlichkeit stärken Strategisches DDT: Die vier Schritte Weg 1: 1. Taktische DDT: Fachlichkeit stärken 2. Strategische DDT Weg 2: 1. Strategische DDT 2. Taktische DDT: Fachlichkeit stärken
  65. WPS – Workplace Solutions GmbH 2. HANDS-ON: ABGLEICH IST SOLL

    Laded den Sonargraph Architect: www.hello2morrow.com Registrieren und Testlizenz erfragen Öffnet im Sonargraph den Sonargraph-Ordner aus Git Drückt auf Refresh und öffne den Exploration View (rechte Maus auf legacy-code) Lege im Reiter “Files” eine neue Architectural View mit dem Namen “BoundedContexts” an Lege über das Kontextmenü des Views zwei neue Artifacte für die beiden BCs an (outgoing relaxed) und sortiere die Klassen des Systems zu Welche Verletzungen finden wir? Welche Refactorings sollten passieren?
  66. WPS – Workplace Solutions GmbH 1.Schritt: Wiederentdecken der Fachdomäne 2.Schritt:

    Modellierung der fachlichen Soll-Architektur 3.Schritt : Abgleich Ist- mit Soll-Architektur 4.Schritt: Priorisieren und Umbaumen Domain-Driven Transformation
  67. WPS – Workplace Solutions GmbH BUILDING BLOCKS = MUSTER FÜR

    DIE MIKRO ARCHITEKTUR User Interface Domain Application Layering by patterns Bounded Context Repository Factory Model View Controller ValueObject Service Entity/Aggregate
  68. WPS – Workplace Solutions GmbH ▪ Symbolisieren Werte eines bestimmten

    Typs der Fachdomäne. ▪ Symbolisieren bei Gleichheit denselben Wert. ▪ Sie werden vom Anwender nicht „bearbeitet“, sondern nur weiterverarbeitet. ▪ Können aus anderen Value Objects bestehen werden. VALUE OBJECTS ValueObject 2,5 ValueObject 2,5 ValueObject 5/2 ValueObject 2½ ValueObject zwei- einhalb
  69. WPS – Workplace Solutions GmbH Sind die Kernobjekte einer Fachdomäne.

    Sie werden vom Anwender „bearbeitet“. An ihnen schlagen sich die Ergebnisse seiner Arbeit nieder. Beispiel Entity „Peilplan“: Der Nautiker markiert eine Untiefe im Peilplan. Besitzen eine zustandsunabhängige, unveränderliche Identität. Haben einen klar definierten Lebenszyklus. Besitzen einen (meist veränderlichen) Zustand. Beschreiben ihren Zustand mithilfe von Value Objects. Auch: Business Objects / Domain Objects → NICHT ZU VERWECHSELN mit dem Begriff "ENTITY" aus dem Entity-Relationship-Modell! ENTITIES
  70. WPS – Workplace Solutions GmbH ENITIES AND VALUE OBJECTS Entity

    Entity Entity Entity VO VO VO VO VO VO VO VO VO VO VO
  71. WPS – Workplace Solutions GmbH GREAT, BUT… public class Account

    { // ... public int balance() { return _balance; } public void setBalance(int amount) { _balance = amount; } } Can I set the Balance to a negative amount? In EUR or GBP or…?
  72. WPS – Workplace Solutions GmbH AN AMOUNT TYPE public class

    Amount { private final int _amount; private final Currency _currency; }
  73. WPS – Workplace Solutions GmbH AN AMOUNT TYPE public class

    Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } }
  74. WPS – Workplace Solutions GmbH AN AMOUNT TYPE public class

    Amount { private final int _amount; private final Currency _currency; private Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } public static Amount of(int amount, Currency currency) { return new Amount(amount, currency); } }
  75. WPS – Workplace Solutions GmbH AN AMOUNT TYPE public class

    Amount { private final int _amount; private final Currency _currency; private 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); } }
  76. WPS – Workplace Solutions GmbH AN AMOUNT TYPE public class

    Amount { private final int _amount; private final Currency _currency; private 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() }
  77. WPS – Workplace Solutions GmbH AN AMOUNT TYPE public class

    Amount { private final int _amount; private final Currency _currency; private Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } public Amount add(Amount otherAmount) { return Amount.of(_amount + otherAmount._amount, _currency); } public Amount substract(Amount otherAmount) { return Amount.of(_amount - otherAmount._amount, _currency); } The new value object type only behaves correctly, if the currency is the same! Problem will be resolved later ☺
  78. WPS – Workplace Solutions GmbH A BANK ACCOUNT – NEW

    VERSION public class Account { private Amount _balance; public Amount balance() { return _balance; } public void setBalance (Amount amount) { _balance = amount; } } Now we can use the amount type
  79. WPS – Workplace Solutions GmbH 3. HANDS-ON: VALUE OBJECTS Lasst

    uns die fachlichen Klassen anschauen Was für Value Objects könnte Account noch brauchen? Braucht Credit auch Value Objects? Hands-on: Welche Value Objects brauchen wir insgesamt? Baut einen neuen Value Object ein! Wo wollen wir die Value Objects einsortieren?
  80. WPS – Workplace Solutions GmbH Was wir nicht wollen! ✘

    ANEMIC DOMAIN MODEL ▪ Die Schnittstellen der Klassen im Domänenmodell bestehen aus getters und setters ▪ Die Fachlichkeit befindet sich in den Services oder der UI und nicht in den Entities ▪ Es gibt viele Util, Helper and Manager Klassen
  81. WPS – Workplace Solutions GmbH A BANK ACCOUNT - FIRST

    DRAFT public class Account { private Amount _balance; public Amount getBalance() { return _balance; } public void setBalance(Amount amount) { _balance = balance; } } ✘ Bad: The account balance can be set to any value
  82. WPS – Workplace Solutions GmbH A BANK ACCOUNT – SECOND

    VERSION public class Account { private Amount _balance; public Amount balance() { return _balance; } public void deposit(Amount amount) { _balance = _balance.add(amount); } public void withdraw(Amount amount) { _balance = _balance.substract(amount); } } Better: Operations with domain- specific behavior and names
  83. WPS – Workplace Solutions GmbH DESIGN BY CONTRACT Foto: Urheber

    Fuchsias/Bertrand Meyer/Wikipedia/CC BY-SA 4.0
  84. WPS – Workplace Solutions GmbH A BANK ACCOUNT – DESIGN

    BY CONTRACT USING “ASSERT” public class Account { // ... public void withdraw(Amount amount) { // _balance >= amount _balance = _balance.subtract(amount); } } Assertion using keyword “assert”
  85. WPS – Workplace Solutions GmbH A BANK ACCOUNT – DESIGN

    BY CONTRACT USING “ASSERT” public class Account { // ... public void withdraw(Amount amount) { assert amount.isLessOrEqual(balance()); _balance = _balance.subtract(amount); } } Assertion using keyword “assert”
  86. WPS – Workplace Solutions GmbH AN AMOUNT TYPE public class

    Amount { private final int _amount; private final Currency _currency; ... public boolean isLessOrEqual(Amount otherAmount) { return otherAmount._currency == _currency && otherAmount._balance <= _balance; } public boolean hasSameCurrency(Amount otherAmount) { return otherAmount._currency == _currency; } }
  87. WPS – Workplace Solutions GmbH A BANK ACCOUNT – FOURTH

    VERSION public class Account { private Amount _balance; ... public void deposit(Amount amount) { assert amount.hasSameCurrency(balance()); _balance = _balance.add(amount); } public void withdraw(Amount amount) { assert amount.hasSameCurrency(balance()); assert amount.isLessOrEqual(balance()); _balance = _balance.subtract(amount); } }
  88. WPS – Workplace Solutions GmbH LAW OF DEMETER – PRINCIPLE

    OF CONFIDENTIALITY „If you delegate, delegate fully!“ „Don‘t talk to a stranger!“ (also: "shy code") student.getRecord().getExamEntry("SE2/2006").addResult(93); Record Student ExamEntry SE2/2006 getRecord() getExamEntry(String) addResult(int) ✘ Here the Law of Demeter is violated! ▪ If you "implement" traversing object nets, you couple the code too strongly to a structure → bad changeability!
  89. WPS – Workplace Solutions GmbH LAW OF DEMETER – PRINCIPLE

    OF CONFIDENTIALITY Do not use the objects of your objects. Do not delegate and do not care how and with what an object works. "Tell, don‘t ask" student.scored("SE2/2006", 93); Record Student ExamEntry SE2/2006 scored(String,int) getExamEntry(String) addResult(int) Here the Law of Demeter is followed!
  90. WPS – Workplace Solutions GmbH 4. HANDS-ON: Reiche Domänenklassen Schauen

    wir uns noch einmal die Domänenklassen an Sind Credit und Account reiche Domänenklassen? Ist das law of demeter verletzt? Hands-on Was sind aus Eurer Sicht die Probleme? Wie sollten wir die Klassen refactorn? Wenn Zeit ist, dann baut das System um!
  91. WPS – Workplace Solutions GmbH Wie ist der Arbeitsablauf in

    der Domäne organisiert? @ca(i)rolali Pipeline Domain Blackboard Domain Dialog Domain
  92. WPS – Workplace Solutions GmbH Domain Pattern: Pipeline Domain Pro

    Schritt eine Rolle Eins zu eins Zusammenhang zwischen Rolle und Arbeitsergebnis in einem Status Klare zeitliche Reihenfolge für die Schritte Klare Übergänge zwischen den Schritten Arbeitsergebnisse werden übergeben Arbeitsergebnisse sind Grundlage für den nächsten Schritt
  93. WPS – Workplace Solutions GmbH Beispiele: Pipeline Domain Logistische Prozesse

    Kauf- und Lieferprozesse und Handel auf Handelsplattformen Abschluss von Versicherungen oder Kreditverträgen Behördliche Prozesse
  94. WPS – Workplace Solutions GmbH Domain Pattern: Blackboard Domain @ca(i)rolali

    Verschiedene Rollen arbeiten gemeinsam an einem oder mehreren Geschäftsobjekten – es gibt keine 1-zu-1 Beziehung zwischen Rollen und Geschäftsobjekten keine Übergabe von Arbeitsergebnissen Keine klare Reihenfolge der Schritte
  95. WPS – Workplace Solutions GmbH Beispiele: Blackboard Domain @ca(i)rolali Kalkulationssoftware

    für Autos oder Maschinen und Anlagen Beobachten und Überwachen in einem Leitstand, z. B. Überwachen von Anlagen, Logistikprozessen, Verkehrsfluss oder die Beeinträchtigung von Lieferketten Planung von größeren Ereignissen (Veranstaltungsmanagement) Softwareentwicklung in agilen Teams Computerspiele, bei denen viele Spieler in einer Welt zusammentreffen
  96. WPS – Workplace Solutions GmbH Domain Pattern: Dialog Domain @ca(i)rolali

    Verschiedene Rollen arbeiten gemeinsam an einem oder mehreren Geschäftsobjekten – es gibt keine 1-zu-1 Beziehung zwischen Rollen und Geschäftsobjekten keine Übergabe von Arbeitsergebnissen Gemeinsames Aushandeln eines Plans Mehrere Parteien aus unterschiedlichen Unternehmen
  97. WPS – Workplace Solutions GmbH Beispiele: Dialog Domain @ca(i)rolali Das

    Aushandeln von Schiffsreiseplanungen zwischen Reedereien und Häfen Das Aushandeln der Art, Lieferung und Wartungszyklen für Großgeräte zwischen Disponenten und Kunden Das Aushandeln der langfristigen Baumaßnahmenplanung zwischen Verwaltung und Bauantragsstellern Manche Spiele fallen auch in diese Kategorie, wenn sie auf Aushandlungsprozessen basieren
  98. WPS – Workplace Solutions GmbH Domains und Subdomain und Subsubdomains

    ….. @ca(i)rolali Domain: Pipline Sub: Pipeline Sub: Dialog Sub: Blackboard Subsub: Pipeline Subsub: Pipeline Domain
  99. WPS – Workplace Solutions GmbH 1. Schritt: Wiederentdecken der Fachdomäne

    2. Schritt: Modellierung der fachlichen Soll-Architektur 3. Schritt: Abgleich Ist- mit Soll-Architektur 4. Schritt: Priorisieren und Umbaumen Domain-Driven Transformation Big Ball of Mud Technische Schichtung Domain-Driven Module 2 4 6 8 1 0 1. Technische DDT: Technisch stabilisieren 2. Taktische DDT: Fachlichkeit stärken Strategisches DDT: Die vier Schritte Weg 1: 1. Taktische DDT: Fachlichkeit stärken 2. Strategische DDT Weg 2: 1. Strategische DDT 2. Taktische DDT: Fachlichkeit stärken