SlideShare ist ein Scribd-Unternehmen logo
1 von 95
Patterns of Domain-Driven Design
I © NETFORMIC GmbH I
@afoeder
2
I © NETFORMIC GmbH I3
Domain-Driven Design
Gleichnamiges Buch
von Eric Evans aus 2003
Bild: Google Books
I © NETFORMIC GmbH I4
2003: Evans’ Domain-Driven Design erscheint
Bilder: Google Books
2010: Zukunftssichere TYPO3-Extensions
mit Extbase und Fluid erscheint und macht
DDD der TYPO3-Welt bekannt
2013: Implementing Domain-Driven Design
von Vaughn Vernon gibt Praxisrat
2016: Domain-Driven Design Distilled
[Vernon] Taschenbuch mit DDD in Kurzform
2006/07: Lemke und Dambekalns beginnen
die Arbeit an „FLOW3“1, stark das DDD-
Paradigma stützend
1: https://www.heise.de/developer/artikel/Robert-Lemke-im-Interview-zu-FLOW3-1362225.html?seite=3
Domain-Driven Design
I © NETFORMIC GmbH I5
Domain-Driven Design
• Herangehensweise zur Softwareentwicklung
I © NETFORMIC GmbH I6
Domain-Driven Design
• Streng ausgerichtet auf die Fachlichkeit
der Domäne (das Business, eben)
I © NETFORMIC GmbH I
Ubiquitous Language
ubiquitous (adv): allgegenwärtig
7 Bild: Adrian Föder, CC BY-SA 4.0
I © NETFORMIC GmbH I8
Ubiquitous Language (UL)
Streng gemeinsam genutzte „Sprache“1
zwischen allen Beteiligten
1 gemeint ist eher „Vokabular“
• DOMAIN EXPERT (Kunde, „PO“)
• Entwickler
• Projektleiter
• …
I © NETFORMIC GmbH I9
Ubiquitous Language (UL)
I © NETFORMIC GmbH I10
Ubiquitous Language (UL)
Ziel:
Gemeinsames, tiefes Verständnis etablieren
I © NETFORMIC GmbH I11
Ubiquitous Language (UL)
• UL im Regelfall vom DOMAIN EXPERT geprägt
• Entwickelt sich während der Arbeit damit
weiter (vgl. Sprache)
I © NETFORMIC GmbH I12
Ubiquitous Language (UL)
Entwickler müssen direkt mit dem
Domain Expert sprechen!
Jedes Mal!
Notfalls mit Bestechung!
Bild: Implementing Domain-Driven Design, [Vernon2013], p30, Screenshot aus Google Books
I © NETFORMIC GmbH I13
Ubiquitous Language (UL)
Entwickler: häufig zu technisch
in Denke und Kommunikation
AUTRAG!
KOMMISSION!TBL_ORDERS!
TBL_PICKUP!
I © NETFORMIC GmbH I14
Ubiquitous Language (UL)
Business
=
Model
=
Code
Daher Achtung: Tabellen sind nur
technische Notwendigkeit
ORMs übernehmen diese Arbeit
I © NETFORMIC GmbH I
Entities
Mehr als die Summe ihrer Eigenschaften
15 Bild: https://commons.wikimedia.org/wiki/File:Macro_Fingerprints.jpg v. D. Sharon Pruitt
I © NETFORMIC GmbH I16
Entities
ENTITIES haben eine Identität
I © NETFORMIC GmbH I17
Entities
Bleiben während ihres Lifecycles
immer dieselben
I © NETFORMIC GmbH I18
Entities
• Höhe: 53 cm
• Gewicht: 3,3 kg
• Höhe: 158 cm
• Gewicht: 52,7 kg
• Höhe: 181 cm
• Gewicht: 81,5 kg
• Höhe: 178 cm
• Gewicht: 72 kg
Peter:
I © NETFORMIC GmbH I20
Entities
Identifier?
I © NETFORMIC GmbH I
Value Objects
Eigenschaften sind alles
21 Bild: https://commons.wikimedia.org/wiki/File:Petite_Picasso_110324-F-LA132-004.jpg
I © NETFORMIC GmbH I22
Value
Objects
Bild: https://pixabay.com/en/crayons-coloring-book-coloring-book-1445053/
GIB MIR MAL DIE
GELB!
I © NETFORMIC GmbH I23
Value Objects
VALUE OBJECTS haben
keine konzeptionelle Identität
I © NETFORMIC GmbH I24
Value
Objects
Bild: https://www.pexels.com/photo/baked-goods-bakery-bread-breakfast-162996/
EIN HELLES
MIT
WENIG SALZ
BITTE!
I © NETFORMIC GmbH I25
Value Objects
VALUE OBJECTS sind
immutable, also unveränderlich!
I © NETFORMIC GmbH I26
Value Objects
ENTITY oder VALUE OBJECT?
Bild: https://www.pexels.com/photo/gray-auto-bill-counter-164688/
Bild: https://www.pexels.com/photo/close-up-of-50-euro-money-248933/
Bild: https://www.pexels.com/photo/close-up-of-50-euro-money-248933/
I © NETFORMIC GmbH I30
Entity oder Value Object
Why care?
Warum nicht auf Verdacht
immer Identity?
I © NETFORMIC GmbH I31
Entity oder Value Object
Identities managen ist expensive.
Bild: https://www.pexels.com/photo/top-angle-photo-of-child-holding-pencil-while-drawing-female-angel-playing-wind-instrument-707193/
Bild: https://www.pexels.com/photo/bank-note-banknote-banknotes-bill-259251/
I © NETFORMIC GmbH I34
Entity oder Value Object
In verteilten Systemen wäre zusätzlich
ein ANTI CORRUPTION LAYER erforderlich
I © NETFORMIC GmbH I35
Entities und Value Objects
Technische Betrachtungen
I © NETFORMIC GmbH I36
Entities und Value Objects
Entities in Doctrine sind…
I © NETFORMIC GmbH I37
Entities und Value Objects
I © NETFORMIC GmbH I38
Entities und Value Objects
Every PHP object that you want to save in the database using Doctrine is called an “Entity”. The
term “Entity” describes objects that have an identity over many independent requests. This
identity is usually achieved by assigning a unique identifier to an entity.
I © NETFORMIC GmbH I39
Entities und Value Objects
I © NETFORMIC GmbH I40
Entities und Value Objects
Aber Value Objects haben doch keine Identifier?
I © NETFORMIC GmbH I41
Entities und Value Objects
In Doctrine: Embeddables
I © NETFORMIC GmbH I42
Value Objects mit Embeddables
I © NETFORMIC GmbH I43
Value Objects mit Embeddables
I © NETFORMIC GmbH I44
Value Objects mit Embeddables
I © NETFORMIC GmbH I45
Value Objects mit Embeddables
I © NETFORMIC GmbH I46
Value Objects mit Embeddables
I © NETFORMIC GmbH I47
Value Objects mit Embeddables
Felder der Embedded-Klassen werden schlicht daneben angefügt
Durch den Prefix können diese Embeddables wiederverwendet werden
(Address, Money, PersonName, …)
Prefix kann bei Bedarf geändert oder entfernt werden:
I © NETFORMIC GmbH I48
Entities und Value Objects
Domain Logic in die Models!
I © NETFORMIC GmbH I49
Entities und VOs tun Dinge.
wissen Dinge.
können Dinge.
Entities und Value Objects
I © NETFORMIC GmbH I50
Wenn nicht, hat man ein
Anemic Domain Model.
which is bad.
Entities und Value Objects
I © NETFORMIC GmbH I51
Anemic Domain Models
I © NETFORMIC GmbH I52
Anemic Domain Models
I © NETFORMIC GmbH I53
Anemic Domain Models
I © NETFORMIC GmbH I54
Anemic Domain Models
I © NETFORMIC GmbH I55
Anemic Domain Models
• Tell, don’t ask.
• Models sind keine dummen Datenbeutel.
• Methoden sollen Business-Fälle reflektieren
und selbst ihre Integrität bewahren.
I © NETFORMIC GmbH I56
Anemic Domain Models
Business-Case-Beispiel:
Kunde zieht um
I © NETFORMIC GmbH I57
Anemic Domain Models
I © NETFORMIC GmbH I58
Anemic Domain Models
• Vielleicht kann er ja garnicht einfach „umziehen“?
(Kabelanschluss erst prüfen oder so)
• Vielleicht müssen Drittsysteme
benachrichtigt werden
I © NETFORMIC GmbH I59
Anemic Domain Models
I © NETFORMIC GmbH I
Services
»Sometimes it just isn’t a thing«
60
Bild: https://www.pexels.com/photo/coffee-shop-702251/
I © NETFORMIC GmbH I
Services kommen in Frage, wenn…
61
• die Operation nicht naturgemäß eher einer ENTITY oder einem VALUE OBJECT
obliegt
• die Operation stateless ist
• die Operation Teil der UBIQUITOUS LANGUAGE ist
I © NETFORMIC GmbH I
Aggregates
Zusammenhalt
62
Bild: https://www.pexels.com/photo/binding-books-bound-colorful-272980/
I © NETFORMIC GmbH I63
Aggregates
Bild: https://www.valueflo.ws/specification/diagrams/uml.html
I © NETFORMIC GmbH I64
Aggregates
Aggregate sind eine Gruppierung aus Objekten, die
miteinander in Verbindung stehen
Ein Aggregat hat eine Wurzel und eine Grenze
I © NETFORMIC GmbH I65
Aggregates
I © NETFORMIC GmbH I66
Aggregates
I © NETFORMIC GmbH I67
Aggregates
Der Inhaber ist außerhalb des Kontexts einer
Apotheke völlig irrelevant.
I © NETFORMIC GmbH I68
Aggregates
• „Eine Apotheke hat
mindestens einen Inhaber“
• „Nur eine Apo der
Handelsform oHG darf
mehrere Inhaber haben,
die dann allesamt „e.K.“
sein müssen“
Bild: https://www.pexels.com/photo/adult-blur-boss-business-288477/
I © NETFORMIC GmbH I69
Aggregates
„Framework“
DB
“Repository”
(“Doctrine”)
“Templating”
(“macht HTML”)
“Controller”
(“macht PHP”)(“macht PHP”)
I © NETFORMIC GmbH I70
Aggregates
I © NETFORMIC GmbH I71
Aggregates
Untestbar (Controller: viel Unwesentliches)
Core-Business-Konzept ist tief vergraben
irgendwo in einem Controller in prozeduralen if-
else-Anweisungen
Hohe code duplication bei Wiederkehren der
Anforderung
Bild: Adobe Stock
I © NETFORMIC GmbH I73
Aggregates
Aggregates stellen Datenintegrität
ihrer Members sicher.
I © NETFORMIC GmbH I74
Aggregates
I © NETFORMIC GmbH I75
Aggregates
Apotheke ändert Unternehmensform?
I © NETFORMIC GmbH I76
Aggregates
KEIN Anemic Domain Model mehr!
I © NETFORMIC GmbH I77
Aggregates
Prinzipiell:
Die Anwendung (im Business-Sinne!) benötigt keinen
expliziten Zugriff auf die Entities eines Aggregates
Nur Aggregate Roots haben ein REPOSITORY!
I © NETFORMIC GmbH I78
Aggregates
Hof-Apotheke Tests: • Bluttests
• Legionellen
• Haarmineralanalyse
Homöopathie: • Schüssler-Salze
• Anthroposophische
Arzneimittel
I © NETFORMIC GmbH I
Repositories
Abgelegtes wiederbekommen
79
Bild: Screenshot Raiders of the Lost Ark (1981) von Steven Spielberg via Netflix
I © NETFORMIC GmbH I80
Repositories
„Mit Repositories bekomme ich meine
Daten aus der Datenbank“
– ein Entwickler
I © NETFORMIC GmbH I81
Repositories
I © NETFORMIC GmbH I82
Repositories
„Über Repositories erhalte ich Referenzen
auf Objekte zurück.“
I © NETFORMIC GmbH I83
Repositories
• Repositories sind eine dünne Schicht
zwischen Domain (Layer) und
Persistenz
• Repositories sind für je eine Entity
(besser: Aggregate Root) zuständig
• Repositories enthalten keine
(Business-)Logik!
• (nicht einmal) Validierung.
I © NETFORMIC GmbH I84
Repositories
Doctrine bietet bereits (magische)
Repositories
Mein Tipp: dennoch (Stub) erstellen für
Typsicherheit
I © NETFORMIC GmbH I
Ausblick
wait, there is more!
85 Bild: https://www.pexels.com/photo/grayscale-photo-of-yachts-on-body-of-water-under-cloudy-sky-698379/
I © NETFORMIC GmbH I
Domains, Subdomains & Bounded Contexts
Big Picture
86
I © NETFORMIC GmbH I87
Bounded Contexts
Product
Invoice
Order
Customer
Rating
Inventory
Category
Searching
Newsletter
Shipping
I © NETFORMIC GmbH I88
Bounded Contexts
Catalog
Models
Product Category
I © NETFORMIC GmbH I89
Bounded Contexts
Inventory
Models
Product Warehouse
Rack
I © NETFORMIC GmbH I90
Bounded Contexts
Es gibt mehr als eine Klasse, die ein Produkt repräsentiert.
I © NETFORMIC GmbH I91
Context Map
I © NETFORMIC GmbH I
Kommunikation über Messaging
Domain Events
92
I © NETFORMIC GmbH I
The heck are they?
Microservices
93
I © NETFORMIC GmbH I94
Microservices
Die Geister scheiden sich
I © NETFORMIC GmbH I
Literatur
95

Weitere ähnliche Inhalte

Ähnlich wie Patterns of domain driven design

Smart Home = Smart Journey? Qualität von Vermarktungsstrategien im Web
Smart Home = Smart Journey? Qualität von Vermarktungsstrategien im WebSmart Home = Smart Journey? Qualität von Vermarktungsstrategien im Web
Smart Home = Smart Journey? Qualität von Vermarktungsstrategien im WebeResult_GmbH
 
WCM im Jahr 2013 und danach - der Stand der Dinge
WCM im Jahr 2013 und danach - der Stand der DingeWCM im Jahr 2013 und danach - der Stand der Dinge
WCM im Jahr 2013 und danach - der Stand der DingeBernd Burkert
 
Google Tools für Fotografen
Google Tools für FotografenGoogle Tools für Fotografen
Google Tools für FotografenPARX
 
Innovationsmanagement auf SharePoint 2010
Innovationsmanagement auf SharePoint 2010Innovationsmanagement auf SharePoint 2010
Innovationsmanagement auf SharePoint 2010IPI GmbH
 
Desktop Publishing war 1985. Jetzt geht mehr!
Desktop Publishing war 1985. Jetzt geht mehr!Desktop Publishing war 1985. Jetzt geht mehr!
Desktop Publishing war 1985. Jetzt geht mehr!Haeme Ulrich
 
cloud oder nicht-cloud - strategien für sonnenschein am it-himmel
cloud oder nicht-cloud - strategien für sonnenschein am it-himmelcloud oder nicht-cloud - strategien für sonnenschein am it-himmel
cloud oder nicht-cloud - strategien für sonnenschein am it-himmelWe4IT Group
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatMarkus Goldbeck
 
achtQuark Präsentation zum Seminar "Anwendungsbereich Innovatives Wissensmana...
achtQuark Präsentation zum Seminar "Anwendungsbereich Innovatives Wissensmana...achtQuark Präsentation zum Seminar "Anwendungsbereich Innovatives Wissensmana...
achtQuark Präsentation zum Seminar "Anwendungsbereich Innovatives Wissensmana...achtQuark
 
Paradigmenwechsel bei webapplikationen
Paradigmenwechsel bei webapplikationenParadigmenwechsel bei webapplikationen
Paradigmenwechsel bei webapplikationenJohann-Peter Hartmann
 
AgileAustriaConference2023_Agile Software Development meets Business_FlorianB...
AgileAustriaConference2023_Agile Software Development meets Business_FlorianB...AgileAustriaConference2023_Agile Software Development meets Business_FlorianB...
AgileAustriaConference2023_Agile Software Development meets Business_FlorianB...Agile Austria Conference
 
eStrategy-Magazin Ausgabe 03/2013
eStrategy-Magazin Ausgabe 03/2013eStrategy-Magazin Ausgabe 03/2013
eStrategy-Magazin Ausgabe 03/2013TechDivision GmbH
 
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
 
"Failure is not an options" Slides from our IBM Connections Webinar Series. F...
"Failure is not an options" Slides from our IBM Connections Webinar Series. F..."Failure is not an options" Slides from our IBM Connections Webinar Series. F...
"Failure is not an options" Slides from our IBM Connections Webinar Series. F...Beck et al. GmbH
 
Make Your IBM Connections Deployment Your Own - Customize it! German Version
Make Your IBM Connections Deployment Your Own - Customize it! German VersionMake Your IBM Connections Deployment Your Own - Customize it! German Version
Make Your IBM Connections Deployment Your Own - Customize it! German VersionKlaus Bild
 
WYSIWYG-Editoren (für Drupal 7)
WYSIWYG-Editoren (für Drupal 7)WYSIWYG-Editoren (für Drupal 7)
WYSIWYG-Editoren (für Drupal 7)Nicolai Schwarz
 
Bottom-up anstatt Top-down: Wie man eine einheitliche Architektur bei vielfäl...
Bottom-up anstatt Top-down: Wie man eine einheitliche Architektur bei vielfäl...Bottom-up anstatt Top-down: Wie man eine einheitliche Architektur bei vielfäl...
Bottom-up anstatt Top-down: Wie man eine einheitliche Architektur bei vielfäl...Stephan Volmer
 
12. TANNER-Hochschulwettbewerb | Beitrag Team Kühle (Fachhochschule Südwestfa...
12. TANNER-Hochschulwettbewerb | Beitrag Team Kühle (Fachhochschule Südwestfa...12. TANNER-Hochschulwettbewerb | Beitrag Team Kühle (Fachhochschule Südwestfa...
12. TANNER-Hochschulwettbewerb | Beitrag Team Kühle (Fachhochschule Südwestfa...TANNER AG
 
Präsentation SEO an der HWZ - 27. Januar 2010
Präsentation SEO an der HWZ - 27. Januar 2010Präsentation SEO an der HWZ - 27. Januar 2010
Präsentation SEO an der HWZ - 27. Januar 2010INM AG
 

Ähnlich wie Patterns of domain driven design (20)

Smart Home = Smart Journey? Qualität von Vermarktungsstrategien im Web
Smart Home = Smart Journey? Qualität von Vermarktungsstrategien im WebSmart Home = Smart Journey? Qualität von Vermarktungsstrategien im Web
Smart Home = Smart Journey? Qualität von Vermarktungsstrategien im Web
 
WCM im Jahr 2013 und danach - der Stand der Dinge
WCM im Jahr 2013 und danach - der Stand der DingeWCM im Jahr 2013 und danach - der Stand der Dinge
WCM im Jahr 2013 und danach - der Stand der Dinge
 
Google Tools für Fotografen
Google Tools für FotografenGoogle Tools für Fotografen
Google Tools für Fotografen
 
Innovationsmanagement auf SharePoint 2010
Innovationsmanagement auf SharePoint 2010Innovationsmanagement auf SharePoint 2010
Innovationsmanagement auf SharePoint 2010
 
Desktop Publishing war 1985. Jetzt geht mehr!
Desktop Publishing war 1985. Jetzt geht mehr!Desktop Publishing war 1985. Jetzt geht mehr!
Desktop Publishing war 1985. Jetzt geht mehr!
 
cloud oder nicht-cloud - strategien für sonnenschein am it-himmel
cloud oder nicht-cloud - strategien für sonnenschein am it-himmelcloud oder nicht-cloud - strategien für sonnenschein am it-himmel
cloud oder nicht-cloud - strategien für sonnenschein am it-himmel
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with Behat
 
achtQuark Präsentation zum Seminar "Anwendungsbereich Innovatives Wissensmana...
achtQuark Präsentation zum Seminar "Anwendungsbereich Innovatives Wissensmana...achtQuark Präsentation zum Seminar "Anwendungsbereich Innovatives Wissensmana...
achtQuark Präsentation zum Seminar "Anwendungsbereich Innovatives Wissensmana...
 
Paradigmenwechsel bei webapplikationen
Paradigmenwechsel bei webapplikationenParadigmenwechsel bei webapplikationen
Paradigmenwechsel bei webapplikationen
 
HTML5-Features
HTML5-FeaturesHTML5-Features
HTML5-Features
 
AgileAustriaConference2023_Agile Software Development meets Business_FlorianB...
AgileAustriaConference2023_Agile Software Development meets Business_FlorianB...AgileAustriaConference2023_Agile Software Development meets Business_FlorianB...
AgileAustriaConference2023_Agile Software Development meets Business_FlorianB...
 
eStrategy-Magazin Ausgabe 03/2013
eStrategy-Magazin Ausgabe 03/2013eStrategy-Magazin Ausgabe 03/2013
eStrategy-Magazin Ausgabe 03/2013
 
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)
 
"Failure is not an options" Slides from our IBM Connections Webinar Series. F...
"Failure is not an options" Slides from our IBM Connections Webinar Series. F..."Failure is not an options" Slides from our IBM Connections Webinar Series. F...
"Failure is not an options" Slides from our IBM Connections Webinar Series. F...
 
Web 2.0 Kompakt - Einführung
Web 2.0 Kompakt - EinführungWeb 2.0 Kompakt - Einführung
Web 2.0 Kompakt - Einführung
 
Make Your IBM Connections Deployment Your Own - Customize it! German Version
Make Your IBM Connections Deployment Your Own - Customize it! German VersionMake Your IBM Connections Deployment Your Own - Customize it! German Version
Make Your IBM Connections Deployment Your Own - Customize it! German Version
 
WYSIWYG-Editoren (für Drupal 7)
WYSIWYG-Editoren (für Drupal 7)WYSIWYG-Editoren (für Drupal 7)
WYSIWYG-Editoren (für Drupal 7)
 
Bottom-up anstatt Top-down: Wie man eine einheitliche Architektur bei vielfäl...
Bottom-up anstatt Top-down: Wie man eine einheitliche Architektur bei vielfäl...Bottom-up anstatt Top-down: Wie man eine einheitliche Architektur bei vielfäl...
Bottom-up anstatt Top-down: Wie man eine einheitliche Architektur bei vielfäl...
 
12. TANNER-Hochschulwettbewerb | Beitrag Team Kühle (Fachhochschule Südwestfa...
12. TANNER-Hochschulwettbewerb | Beitrag Team Kühle (Fachhochschule Südwestfa...12. TANNER-Hochschulwettbewerb | Beitrag Team Kühle (Fachhochschule Südwestfa...
12. TANNER-Hochschulwettbewerb | Beitrag Team Kühle (Fachhochschule Südwestfa...
 
Präsentation SEO an der HWZ - 27. Januar 2010
Präsentation SEO an der HWZ - 27. Januar 2010Präsentation SEO an der HWZ - 27. Januar 2010
Präsentation SEO an der HWZ - 27. Januar 2010
 

Patterns of domain driven design

  • 2. I © NETFORMIC GmbH I @afoeder 2
  • 3. I © NETFORMIC GmbH I3 Domain-Driven Design Gleichnamiges Buch von Eric Evans aus 2003 Bild: Google Books
  • 4. I © NETFORMIC GmbH I4 2003: Evans’ Domain-Driven Design erscheint Bilder: Google Books 2010: Zukunftssichere TYPO3-Extensions mit Extbase und Fluid erscheint und macht DDD der TYPO3-Welt bekannt 2013: Implementing Domain-Driven Design von Vaughn Vernon gibt Praxisrat 2016: Domain-Driven Design Distilled [Vernon] Taschenbuch mit DDD in Kurzform 2006/07: Lemke und Dambekalns beginnen die Arbeit an „FLOW3“1, stark das DDD- Paradigma stützend 1: https://www.heise.de/developer/artikel/Robert-Lemke-im-Interview-zu-FLOW3-1362225.html?seite=3 Domain-Driven Design
  • 5. I © NETFORMIC GmbH I5 Domain-Driven Design • Herangehensweise zur Softwareentwicklung
  • 6. I © NETFORMIC GmbH I6 Domain-Driven Design • Streng ausgerichtet auf die Fachlichkeit der Domäne (das Business, eben)
  • 7. I © NETFORMIC GmbH I Ubiquitous Language ubiquitous (adv): allgegenwärtig 7 Bild: Adrian Föder, CC BY-SA 4.0
  • 8. I © NETFORMIC GmbH I8 Ubiquitous Language (UL) Streng gemeinsam genutzte „Sprache“1 zwischen allen Beteiligten 1 gemeint ist eher „Vokabular“ • DOMAIN EXPERT (Kunde, „PO“) • Entwickler • Projektleiter • …
  • 9. I © NETFORMIC GmbH I9 Ubiquitous Language (UL)
  • 10. I © NETFORMIC GmbH I10 Ubiquitous Language (UL) Ziel: Gemeinsames, tiefes Verständnis etablieren
  • 11. I © NETFORMIC GmbH I11 Ubiquitous Language (UL) • UL im Regelfall vom DOMAIN EXPERT geprägt • Entwickelt sich während der Arbeit damit weiter (vgl. Sprache)
  • 12. I © NETFORMIC GmbH I12 Ubiquitous Language (UL) Entwickler müssen direkt mit dem Domain Expert sprechen! Jedes Mal! Notfalls mit Bestechung! Bild: Implementing Domain-Driven Design, [Vernon2013], p30, Screenshot aus Google Books
  • 13. I © NETFORMIC GmbH I13 Ubiquitous Language (UL) Entwickler: häufig zu technisch in Denke und Kommunikation AUTRAG! KOMMISSION!TBL_ORDERS! TBL_PICKUP!
  • 14. I © NETFORMIC GmbH I14 Ubiquitous Language (UL) Business = Model = Code Daher Achtung: Tabellen sind nur technische Notwendigkeit ORMs übernehmen diese Arbeit
  • 15. I © NETFORMIC GmbH I Entities Mehr als die Summe ihrer Eigenschaften 15 Bild: https://commons.wikimedia.org/wiki/File:Macro_Fingerprints.jpg v. D. Sharon Pruitt
  • 16. I © NETFORMIC GmbH I16 Entities ENTITIES haben eine Identität
  • 17. I © NETFORMIC GmbH I17 Entities Bleiben während ihres Lifecycles immer dieselben
  • 18. I © NETFORMIC GmbH I18 Entities • Höhe: 53 cm • Gewicht: 3,3 kg • Höhe: 158 cm • Gewicht: 52,7 kg • Höhe: 181 cm • Gewicht: 81,5 kg • Höhe: 178 cm • Gewicht: 72 kg Peter:
  • 19.
  • 20. I © NETFORMIC GmbH I20 Entities Identifier?
  • 21. I © NETFORMIC GmbH I Value Objects Eigenschaften sind alles 21 Bild: https://commons.wikimedia.org/wiki/File:Petite_Picasso_110324-F-LA132-004.jpg
  • 22. I © NETFORMIC GmbH I22 Value Objects Bild: https://pixabay.com/en/crayons-coloring-book-coloring-book-1445053/ GIB MIR MAL DIE GELB!
  • 23. I © NETFORMIC GmbH I23 Value Objects VALUE OBJECTS haben keine konzeptionelle Identität
  • 24. I © NETFORMIC GmbH I24 Value Objects Bild: https://www.pexels.com/photo/baked-goods-bakery-bread-breakfast-162996/ EIN HELLES MIT WENIG SALZ BITTE!
  • 25. I © NETFORMIC GmbH I25 Value Objects VALUE OBJECTS sind immutable, also unveränderlich!
  • 26. I © NETFORMIC GmbH I26 Value Objects ENTITY oder VALUE OBJECT?
  • 30. I © NETFORMIC GmbH I30 Entity oder Value Object Why care? Warum nicht auf Verdacht immer Identity?
  • 31. I © NETFORMIC GmbH I31 Entity oder Value Object Identities managen ist expensive.
  • 34. I © NETFORMIC GmbH I34 Entity oder Value Object In verteilten Systemen wäre zusätzlich ein ANTI CORRUPTION LAYER erforderlich
  • 35. I © NETFORMIC GmbH I35 Entities und Value Objects Technische Betrachtungen
  • 36. I © NETFORMIC GmbH I36 Entities und Value Objects Entities in Doctrine sind…
  • 37. I © NETFORMIC GmbH I37 Entities und Value Objects
  • 38. I © NETFORMIC GmbH I38 Entities und Value Objects Every PHP object that you want to save in the database using Doctrine is called an “Entity”. The term “Entity” describes objects that have an identity over many independent requests. This identity is usually achieved by assigning a unique identifier to an entity.
  • 39. I © NETFORMIC GmbH I39 Entities und Value Objects
  • 40. I © NETFORMIC GmbH I40 Entities und Value Objects Aber Value Objects haben doch keine Identifier?
  • 41. I © NETFORMIC GmbH I41 Entities und Value Objects In Doctrine: Embeddables
  • 42. I © NETFORMIC GmbH I42 Value Objects mit Embeddables
  • 43. I © NETFORMIC GmbH I43 Value Objects mit Embeddables
  • 44. I © NETFORMIC GmbH I44 Value Objects mit Embeddables
  • 45. I © NETFORMIC GmbH I45 Value Objects mit Embeddables
  • 46. I © NETFORMIC GmbH I46 Value Objects mit Embeddables
  • 47. I © NETFORMIC GmbH I47 Value Objects mit Embeddables Felder der Embedded-Klassen werden schlicht daneben angefügt Durch den Prefix können diese Embeddables wiederverwendet werden (Address, Money, PersonName, …) Prefix kann bei Bedarf geändert oder entfernt werden:
  • 48. I © NETFORMIC GmbH I48 Entities und Value Objects Domain Logic in die Models!
  • 49. I © NETFORMIC GmbH I49 Entities und VOs tun Dinge. wissen Dinge. können Dinge. Entities und Value Objects
  • 50. I © NETFORMIC GmbH I50 Wenn nicht, hat man ein Anemic Domain Model. which is bad. Entities und Value Objects
  • 51. I © NETFORMIC GmbH I51 Anemic Domain Models
  • 52. I © NETFORMIC GmbH I52 Anemic Domain Models
  • 53. I © NETFORMIC GmbH I53 Anemic Domain Models
  • 54. I © NETFORMIC GmbH I54 Anemic Domain Models
  • 55. I © NETFORMIC GmbH I55 Anemic Domain Models • Tell, don’t ask. • Models sind keine dummen Datenbeutel. • Methoden sollen Business-Fälle reflektieren und selbst ihre Integrität bewahren.
  • 56. I © NETFORMIC GmbH I56 Anemic Domain Models Business-Case-Beispiel: Kunde zieht um
  • 57. I © NETFORMIC GmbH I57 Anemic Domain Models
  • 58. I © NETFORMIC GmbH I58 Anemic Domain Models • Vielleicht kann er ja garnicht einfach „umziehen“? (Kabelanschluss erst prüfen oder so) • Vielleicht müssen Drittsysteme benachrichtigt werden
  • 59. I © NETFORMIC GmbH I59 Anemic Domain Models
  • 60. I © NETFORMIC GmbH I Services »Sometimes it just isn’t a thing« 60 Bild: https://www.pexels.com/photo/coffee-shop-702251/
  • 61. I © NETFORMIC GmbH I Services kommen in Frage, wenn… 61 • die Operation nicht naturgemäß eher einer ENTITY oder einem VALUE OBJECT obliegt • die Operation stateless ist • die Operation Teil der UBIQUITOUS LANGUAGE ist
  • 62. I © NETFORMIC GmbH I Aggregates Zusammenhalt 62 Bild: https://www.pexels.com/photo/binding-books-bound-colorful-272980/
  • 63. I © NETFORMIC GmbH I63 Aggregates Bild: https://www.valueflo.ws/specification/diagrams/uml.html
  • 64. I © NETFORMIC GmbH I64 Aggregates Aggregate sind eine Gruppierung aus Objekten, die miteinander in Verbindung stehen Ein Aggregat hat eine Wurzel und eine Grenze
  • 65. I © NETFORMIC GmbH I65 Aggregates
  • 66. I © NETFORMIC GmbH I66 Aggregates
  • 67. I © NETFORMIC GmbH I67 Aggregates Der Inhaber ist außerhalb des Kontexts einer Apotheke völlig irrelevant.
  • 68. I © NETFORMIC GmbH I68 Aggregates • „Eine Apotheke hat mindestens einen Inhaber“ • „Nur eine Apo der Handelsform oHG darf mehrere Inhaber haben, die dann allesamt „e.K.“ sein müssen“ Bild: https://www.pexels.com/photo/adult-blur-boss-business-288477/
  • 69. I © NETFORMIC GmbH I69 Aggregates „Framework“ DB “Repository” (“Doctrine”) “Templating” (“macht HTML”) “Controller” (“macht PHP”)(“macht PHP”)
  • 70. I © NETFORMIC GmbH I70 Aggregates
  • 71. I © NETFORMIC GmbH I71 Aggregates Untestbar (Controller: viel Unwesentliches) Core-Business-Konzept ist tief vergraben irgendwo in einem Controller in prozeduralen if- else-Anweisungen Hohe code duplication bei Wiederkehren der Anforderung
  • 73. I © NETFORMIC GmbH I73 Aggregates Aggregates stellen Datenintegrität ihrer Members sicher.
  • 74. I © NETFORMIC GmbH I74 Aggregates
  • 75. I © NETFORMIC GmbH I75 Aggregates Apotheke ändert Unternehmensform?
  • 76. I © NETFORMIC GmbH I76 Aggregates KEIN Anemic Domain Model mehr!
  • 77. I © NETFORMIC GmbH I77 Aggregates Prinzipiell: Die Anwendung (im Business-Sinne!) benötigt keinen expliziten Zugriff auf die Entities eines Aggregates Nur Aggregate Roots haben ein REPOSITORY!
  • 78. I © NETFORMIC GmbH I78 Aggregates Hof-Apotheke Tests: • Bluttests • Legionellen • Haarmineralanalyse Homöopathie: • Schüssler-Salze • Anthroposophische Arzneimittel
  • 79. I © NETFORMIC GmbH I Repositories Abgelegtes wiederbekommen 79 Bild: Screenshot Raiders of the Lost Ark (1981) von Steven Spielberg via Netflix
  • 80. I © NETFORMIC GmbH I80 Repositories „Mit Repositories bekomme ich meine Daten aus der Datenbank“ – ein Entwickler
  • 81. I © NETFORMIC GmbH I81 Repositories
  • 82. I © NETFORMIC GmbH I82 Repositories „Über Repositories erhalte ich Referenzen auf Objekte zurück.“
  • 83. I © NETFORMIC GmbH I83 Repositories • Repositories sind eine dünne Schicht zwischen Domain (Layer) und Persistenz • Repositories sind für je eine Entity (besser: Aggregate Root) zuständig • Repositories enthalten keine (Business-)Logik! • (nicht einmal) Validierung.
  • 84. I © NETFORMIC GmbH I84 Repositories Doctrine bietet bereits (magische) Repositories Mein Tipp: dennoch (Stub) erstellen für Typsicherheit
  • 85. I © NETFORMIC GmbH I Ausblick wait, there is more! 85 Bild: https://www.pexels.com/photo/grayscale-photo-of-yachts-on-body-of-water-under-cloudy-sky-698379/
  • 86. I © NETFORMIC GmbH I Domains, Subdomains & Bounded Contexts Big Picture 86
  • 87. I © NETFORMIC GmbH I87 Bounded Contexts Product Invoice Order Customer Rating Inventory Category Searching Newsletter Shipping
  • 88. I © NETFORMIC GmbH I88 Bounded Contexts Catalog Models Product Category
  • 89. I © NETFORMIC GmbH I89 Bounded Contexts Inventory Models Product Warehouse Rack
  • 90. I © NETFORMIC GmbH I90 Bounded Contexts Es gibt mehr als eine Klasse, die ein Produkt repräsentiert.
  • 91. I © NETFORMIC GmbH I91 Context Map
  • 92. I © NETFORMIC GmbH I Kommunikation über Messaging Domain Events 92
  • 93. I © NETFORMIC GmbH I The heck are they? Microservices 93
  • 94. I © NETFORMIC GmbH I94 Microservices Die Geister scheiden sich
  • 95. I © NETFORMIC GmbH I Literatur 95

Hinweis der Redaktion

  1. Bei Modelling entsteht im Geiste ein Bild des Problems
  2. Ziel: gemeinsames Verständnis des Businesses, dessen Software es umzusetzen gilt
  3. Die anderen müssen dieses Vokabular adaptieren.
  4. Die anderen müssen dieses Vokabular adaptieren.
  5. Die anderen müssen dieses Vokabular adaptieren.
  6. Jeder Aspekt eines Businesses muss (auch explizit) im Code dargestellt sein
  7. .
  8. Diese ID wird auch in Systemen benutzt, um _diesen_ Datensatz wiederzuerkennen
  9. Der gelber Stift ist immer der gelbe Stift, auch wenn er nach Benutzung kürzer wird. Das muss egal sein. Die (un-)Veränderung während des lifecycles ist DIE Abgrenzung zu Entities.
  10. Diese ID wird auch in Systemen benutzt, um _diesen_ Datensatz wiederzuerkennen
  11. 50 Euro als Schein sind 50 Euro als Schein. Good enough.
  12. Eventuell ist doch die Identity, hier: die Seriennnummer, relevant.
  13. Reihe X, Sitz 18: Value Object Beim Stadion-Sitzplatz-Reparaturdienst ist eine Identity relevant, damit sie ggf. dem Besitzer zugeordnet werden kann.
  14. Angenommen, für jeden Strich würde getrackt, mit welchem _exakten_ Stift gezeichnet wurde: unnötig! Irrelevant! Aber nachvollziehbar teuer in der Umsetzung.
  15. Angenommen, ihr leiht Euch von jemandem Geld, und er notiert die Seriennummern und erwartet dass er genau dieses Geld zurückbekommt. Nicht nur irre sondern regelrecht unmöglich!
  16. …um die Identities zu mappen und zu wissen, was sie entsprechen, obwohl es ggf. Intrinsisch eh klar ist (“gelber Wachsmalstift Stärke 3”)
  17. Seer lange Verbindungen, alles mit allem verbunden, schwierig Implikationen nachzuvollziehen
  18. Niemand wird das System nach einem bestimmten Inhaber befragen und sehen, welcher Apotheke er Inhaber ist.
  19. Todo: https://jaxenter.de/stefan-tilkov-antwortet-auf-martin-fowler-brauchst-du-microservices-bau-dir-microservices-21125 -> https://martinfowler.com/bliki/MonolithFirst.html In https://hackernoon.com/learning-these-5-microservice-patterns-will-make-you-a-better-engineer-52fc779c470a wird Evans zitiert, es seien “[services] that can consume and produce messages.” (https://www.youtube.com/watch?v=yPvef9R3k-M)