SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Domain Driven Design
in der Praxis
Michael Mirold, 22.10.2019
STORY TIME
‣ "erfunden" 2004 durch Eric Evans
‣ Software-Modellierungs-Ansatz für fachlich
komplexe Anwendungen
‣ etabliert Pattern-Sprache
‣ große Fan-Gemeinde
DDD Grundideen
Fokus auf
"Core Domain"
Kollaboration von
Fachexperten
und Entwicklern
Etablierung einer
gemeinsamen
Sprache
WAS IST DDD?
testfabrik.com
7
Strategic
Design
Ev
Tactical
Design
Process &
Organization
Architecture &
Frameworks
DDD
testfabrik.com
DDD
STRATEGIC DESIGN - UBIQUITOUS LANGUAGE
"A language structured around the domain
model and used by all team members
within a bounded context to connect all the
activities of the team with the software."
UBIQUITOUS LANGUAGE
STRATEGIC DESIGN - UBIQUITOUS LANGUAGE
UBIQUITOUS
LANGUAGE
Developer
Tester
Business Analyst
Product Owner
Software-
Dokumentation
Requirements
User Interfaces +
Dokumentation
Source-Code
!!!
Team-
Kommunikation
STRATEGIC DESIGN - UBIQUITOUS LANGUAGE
IDEEN FÜR DIE PRAXIS
Aufbau eines Glossars
Vokabular für
User Stories
Verwendung im
Source-Code
‣Möglichst eindeutige Begri
ff
sde
fi
nitionen
‣Beziehungen zu anderen Begri
ff
en erläutern
‣nicht nur Substantive, auch Verhalten und
Eigenschaften
‣wie CRC-Karten
STRATEGIC DESIGN - UBIQUITOUS LANGUAGE
IDEEN FÜR DIE PRAXIS
Aufbau eines Glossars
Vokabular für
User Stories
Verwendung im
Source-Code
‣Schon bei Anforderungsaufnahme "neue
Sprache" verwenden
‣Aufkommen anderer Begri
ff
e hinterfragen
und diskutieren
STRATEGIC DESIGN - UBIQUITOUS LANGUAGE
IDEEN FÜR DIE PRAXIS
Aufbau eines Glossars
Vokabular für
User Stories
Verwendung im
Source-Code
‣Verwendung in
• Variablen- und Methodennamen
• Klassennamen
• APIs
• CSS-Klassen und HTML-Ids
‣Kontrolle in Code-Reviews
testfabrik.com
DDD
STRATEGIC DESIGN - BOUNDED CONTEXT
Streaming-Management
BEISPIEL ZDF:
WAS IST EIN STREAM?
FSK-Regeln
Geo-Location-
Regeln
Syncate
Formitäten
Playees
Formanden
Streamate
Meta-
Artefakte
?
STRATEGIC DESIGN - BOUNDED CONTEXT
WAS IST EIN STREAM?
FSK-Regeln
Geo-Location-
Regeln
Syncate
Formitäten
Playees
Formanden
Streamate
Meta-Artefakte
Streaming-Management
Untertitel
Teaser-Images
Teaser-
Texte
Social-
Media
Links
Formitäten
Autor
Assets
Produktions-Id
Mediathek CMS
Video-Codec
GOP-Size
Audio-
Codec
Bitrate
FPS
Aspect
Container
Pixel-Density
Encoding Cluster
Das universelle Domain-Modell
ist eine Illusion.
teure
STRATEGIC DESIGN - BOUNDED CONTEXT
"A description of a boundary (typically a
subsystem, or the work of a particular
team) within which a particular model is
de
fi
ned and applicable."
BOUNDED CONTEXT
testfabrik.com
DDD
STRATEGIC DESIGN - SUB DOMAINS
Core
Domain
Der Teil des Unternehmens,
um den sich alles dreht
Volle DDD-Power,
volle "Exzellenz"
Support
Domain
Weniger wichtig als
Core Domain
"Muss funktionieren"
(egal wie)
Generic
Subdomain
Generisch, wird
aber gebraucht
Wenn möglich,
zukaufen
STRATEGIC DESIGN - CONTEXT MAP
ZDF
Mediathek
Streaming
Logic
Encoding
Stream
Playout
Börse
Programm-
daten
Wetter
Sportdaten
Medien-
forschung
Teletext
Newsletter
Archiv
Chats und
Foren
Suche
Social
Media
Blog
Content-
Management
OHS/PL
ACL OHS
Supplier
3sat
Mediathek
Phoenix
Mediathek
Tivi
Mediathek
Supplier
Supplier
Supplier
Supplier
"API"
STRATEGIC DESIGN - SUB DOMAINS
IDEEN FÜR DIE PRAXIS
Pragmatisch bleiben
‣ DDD Tactical Design nur, wo es notwendig ist
‣ Support Domains auch per CRUD oder
Transaction Script
Nicht zu früh an Technik
denken
STRATEGIC DESIGN - SUB DOMAINS
IDEEN FÜR DIE PRAXIS
Pragmatisch bleiben
‣ Sub-Domains beschreiben "Problem Space",
d.h. das Business
‣ Bounded Contexts beschreiben "Solution
Space", d.h. die Realisierung
‣ Business-Anforderungen sind die Grundlage
Nicht zu früh an Technik
denken
testfabrik.com
DDD
TACTICAL DESIGN - ÜBERSICHT
Bounded Context "TestManagement"
Start TestRun Abort TestRun
Handle
DeviceReady
HandleTestRun
Timedout
Application
Service
Aggregate
TestRunStarted
TestRunFailed
TestRunFinished
TestRunTimedout
Domain Event
TestRun
Con
fi
guration
Ticket TestId
TestRun
State
UserId DeviceId
Value Object
Identity
TestScheduling
Strategy
Domain
Service
TestRun
Repository
TestRun
Factory
TestRun
Entity
TACTICAL DESIGN - AGGREGATES
AGGREGATES: Zentrales Konzept im Domänenmodell
Aggregate
Root
Entity
Value
Object
Entity
Value
Object
Entity
Value
Object
TACTICAL DESIGN - AGGREGATES
AGGREGATE: Zentrales Konzept im Domänenmodell
Aggregate
Root
Entity
Value
Object
Entity
Value
Object
Entity
Value
Object
‣ Aggregat: zusammenhängende Menge an
Objekten
‣ Aggregat muss zu jedem Zeitpunkt valide und
fachlich konsistent sein
➡ "Consistency Boundary"
‣ auf Aggregat kann von außen nur über
"Aggregate Root" zugegri
ff
en werden
• innere Objekte von außen nicht einzeln
ansprechbar
‣ Aggregat ist Basis für Transaktionalität
TACTICAL DESIGN - AGGREGATES
TIPPS AGGREGATE DESIGN
Aggregate klein halten
‣ Aggregate richtig schneiden ist schwierig
‣ Falsche Entscheidung kann u.a. Skalierbarkeit
verschlechtern
Eine Transaktion -
ein Aggregat
Aggregat-Referenz via Id
Aggregate gut wählen
TACTICAL DESIGN - AGGREGATES
TIPPS AGGREGATE DESIGN
Aggregate klein halten
‣ Sind Aggregate zu groß, drohen Concurrency-
Probleme
‣ Oftmals ein Zeichen für falsche Modellierung
‣ an die (wesentlichen) Usecases denken
Eine Transaktion -
ein Aggregat
Aggregat-Referenz via Id
Aggregate gut wählen
TACTICAL DESIGN - AGGREGATES
TIPPS AGGREGATE DESIGN
Aggregate klein halten
‣ Verbessert Skalierbarkeit
‣ Spiegelt die Grundidee von Aggregaten wider
‣ "Daumenregel"
Eine Transaktion -
ein Aggregat
Aggregat-Referenz via Id
Aggregate gut wählen
TACTICAL DESIGN - AGGREGATES
TIPPS AGGREGATE DESIGN
Aggregate klein halten
‣ Ids sind fachliche Modellobjekte
‣ keine Java-Referenzen
‣ keine Foreign-Key-Beziehungen in der DB
Eine Transaktion -
ein Aggregat
Aggregat-Referenz via Id
Aggregate gut wählen
Aggregat-Persistenz
durch Document-Stores
bietet sich an
testfabrik.com
DDD
ARCHITECTURE - HEXAGONAL ARCHITECTURE
‣ Hexagon realisiert Bounded Context
‣ Alternative zu Schicht-Architektur
‣ Dependency-Inversion-Prinzip (Bob Martin):
"Abstractions should not depend on details.
Details (concrete implementations) should
depend on abstractions."
"High-level modules should not depend
on low-level modules. Both should
depend on abstractions (e.g. interfaces)."
ARCHITECTURE - HEXAGONAL ARCHITECTURE
POST /tests
1
2
create CreateTestCmd
Test
Repo
Test
Factory
Test
Repository
4
create new Test
6
add Test
7
publish
TestCreated
event
8
handle
TestCreated
event
9
send
noti
fi
cation
to user
5
validate new Test
execute CreateTestCmd
3
ARCHITECTURE - HEXAGONAL ARCHITECTURE
Bounded Context Hexagonal-Architektur
+
Gute Basis für Microservices
• hohe organisatorische Isolation (Conway's Law)
• hohe technische Isolation (Aggregate als
technische Transaktionsinseln)
testfabrik.com
DDD
ARCHITECTURE - CQRS
Anwendung modi
fi
zierender und lesender Call
rein modi
fi
zierender Call
rein lesender Call
ANWENDUNG MIT "NORMALEM" SCHICHTENMODELL
Remote Facade
Application Services
Business Logic
Data Access
Client 2
Client 3
Client 4
Client 5
Client 1
ARCHITECTURE - CQRS
EIN "NORMALES" SCHICHTENMODELL: PROBLEME
‣"One size
fi
ts it all"
‣Neue Clients benötigen oft neue
Sichten auf Daten
‣In
fl
ation von DTOs und Schnittstellen
‣Performance-Optimierung immer
schwieriger wegen unterschiedlicher
Anforderungen
‣Changes am Model immer aufwändiger
Remote Facade
Application
Services
Business Logic
Data Access
Client 1
Client 2
Client 3
Client 4
Client 5
ARCHITECTURE - CQRS
CQRS: Trennung von Command- und Query-Models
Application Services
Business Logic
Data Access
Remote Facade
Client 1
Client 2
Client 3
Client 4
Client 5
Remote Facade
Query Service
Data Access
Remote Facade
Query Service
Data Access
Remote Facade
Query Service
Data Access
Command Model
Query Model B Query Model C Query Model D
Query Model A
Remote Facade
Query Service
Data Access
DomainEvent DomainEvent
ARCHITECTURE - CQRS
CQRS: Command / Query Responsibility Segregration
Vorteile
‣ Read-Models können extrem einfach sein,
z.B.
• vollständig denormalisierte SQL-
Tabellen (bzw. Materialized Views)
• ... oder Document Stores
‣ Read-Models erlauben einfache
Skalierung und Performance-Optimierung
‣ möglicherweise komplexe Mechanik:
Messaging, Apache Kafka etc.
‣ nur "eventual consistency": muss
auf Applikations-Ebene kompensiert
werden
‣ Full-Rebuild von Query-Models muss
eingeplant werden und oft teuer
(analog zu Seach-Feeder)
Nachteile
ARCHITECTURE - BEISPIELARCHITEKTUR
WIE GEHTS WEITER?
WIE GEHTS WEITER?
Functional
DDD
DDD und
Prozess
Event
Sourcing
LITERATUR
💆 👍
👨🔬 🔧 ⏲ ⏲
😍 👨🔬
👍 👍
DANKE FÜR EURE
AUFMERKSAMKEIT :-)

Weitere ähnliche Inhalte

Was ist angesagt?

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignRyan Riley
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Alan Christensen
 
Applying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsApplying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsAlexander van Trijffel
 
Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...HostedbyConfluent
 
Hexagonal architecture: how, why and when
Hexagonal architecture: how, why and whenHexagonal architecture: how, why and when
Hexagonal architecture: how, why and whenXoubaman
 
Hexagonal Architecture.pdf
Hexagonal Architecture.pdfHexagonal Architecture.pdf
Hexagonal Architecture.pdfVladimirRadzivil
 
Real World Event Sourcing and CQRS
Real World Event Sourcing and CQRSReal World Event Sourcing and CQRS
Real World Event Sourcing and CQRSMatthew Hawkins
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven DesignAndriy Buday
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureCrishantha Nanayakkara
 
Architectural patterns for high performance microservices in kubernetes
Architectural patterns for high performance microservices in kubernetesArchitectural patterns for high performance microservices in kubernetes
Architectural patterns for high performance microservices in kubernetesRafał Leszko
 
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019Agile India
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#Pascal Laurin
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven developmentDmitry Geyzersky
 
Deconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven DesignDeconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven DesignVMware Tanzu
 
Le Domain Driven Design, comment bien démarrer ?
Le Domain Driven Design, comment bien démarrer ?Le Domain Driven Design, comment bien démarrer ?
Le Domain Driven Design, comment bien démarrer ?Maxime Sanglan-Charlier
 

Was ist angesagt? (20)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated
 
Domain Driven Design 101
Domain Driven Design 101Domain Driven Design 101
Domain Driven Design 101
 
Introduction to DDD
Introduction to DDDIntroduction to DDD
Introduction to DDD
 
Applying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsApplying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain Models
 
Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...
 
Hexagonal architecture: how, why and when
Hexagonal architecture: how, why and whenHexagonal architecture: how, why and when
Hexagonal architecture: how, why and when
 
Hexagonal Architecture.pdf
Hexagonal Architecture.pdfHexagonal Architecture.pdf
Hexagonal Architecture.pdf
 
Real World Event Sourcing and CQRS
Real World Event Sourcing and CQRSReal World Event Sourcing and CQRS
Real World Event Sourcing and CQRS
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
BDD Anti-patterns
BDD Anti-patternsBDD Anti-patterns
BDD Anti-patterns
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal Architecture
 
Architectural patterns for high performance microservices in kubernetes
Architectural patterns for high performance microservices in kubernetesArchitectural patterns for high performance microservices in kubernetes
Architectural patterns for high performance microservices in kubernetes
 
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
 
MVP Clean Architecture
MVP Clean  Architecture MVP Clean  Architecture
MVP Clean Architecture
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven development
 
Deconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven DesignDeconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven Design
 
Le Domain Driven Design, comment bien démarrer ?
Le Domain Driven Design, comment bien démarrer ?Le Domain Driven Design, comment bien démarrer ?
Le Domain Driven Design, comment bien démarrer ?
 

Ähnlich wie Domain-Driven Design in der Praxis

Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...QAware GmbH
 
Presentation bp7 - citrix xen desktop
Presentation   bp7 - citrix xen desktopPresentation   bp7 - citrix xen desktop
Presentation bp7 - citrix xen desktopxKinAnx
 
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudAarno Aukia
 
Migration von Aftersales Systemen auf eine Cloud Plattform
Migration von Aftersales Systemen auf eine Cloud PlattformMigration von Aftersales Systemen auf eine Cloud Plattform
Migration von Aftersales Systemen auf eine Cloud PlattformQAware GmbH
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven DesignTobiasFrischholz
 
Akzeptanz-Test getriebene Produktentwicklung
Akzeptanz-Test getriebene ProduktentwicklungAkzeptanz-Test getriebene Produktentwicklung
Akzeptanz-Test getriebene ProduktentwicklungMichael Brandt
 
Enterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue SchwarzEnterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue SchwarzQAware GmbH
 
CLOUDSERVICES FÜR ISVs
CLOUDSERVICES FÜR ISVsCLOUDSERVICES FÜR ISVs
CLOUDSERVICES FÜR ISVsacentrix GmbH
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalQAware GmbH
 
Microservices - Was EAs zu Microservices wissen sollten
Microservices - Was EAs zu Microservices wissen solltenMicroservices - Was EAs zu Microservices wissen sollten
Microservices - Was EAs zu Microservices wissen solltenJan Thielscher
 
Roadshow 2018 - Camunda in der Praxis: So geht's
Roadshow 2018 - Camunda in der Praxis: So geht'sRoadshow 2018 - Camunda in der Praxis: So geht's
Roadshow 2018 - Camunda in der Praxis: So geht'scamunda services GmbH
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Josef Adersberger
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?QAware GmbH
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalQAware GmbH
 
Erp in der zukunft: über die funktionen hinaus
Erp in der zukunft: über die funktionen hinausErp in der zukunft: über die funktionen hinaus
Erp in der zukunft: über die funktionen hinausDedagroup
 
Technologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungTechnologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungFalk Hartmann
 
Citrix Day 2014: Swisscom Dynamic Workplace Framework
Citrix Day 2014: Swisscom Dynamic Workplace FrameworkCitrix Day 2014: Swisscom Dynamic Workplace Framework
Citrix Day 2014: Swisscom Dynamic Workplace FrameworkDigicomp Academy AG
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core ApplicationsRobin Sedlaczek
 
Citrix Day 2014: Panalpina - global und doch nah
Citrix Day 2014: Panalpina - global und doch nahCitrix Day 2014: Panalpina - global und doch nah
Citrix Day 2014: Panalpina - global und doch nahDigicomp Academy AG
 

Ähnlich wie Domain-Driven Design in der Praxis (20)

Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
 
Presentation bp7 - citrix xen desktop
Presentation   bp7 - citrix xen desktopPresentation   bp7 - citrix xen desktop
Presentation bp7 - citrix xen desktop
 
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
 
Migration von Aftersales Systemen auf eine Cloud Plattform
Migration von Aftersales Systemen auf eine Cloud PlattformMigration von Aftersales Systemen auf eine Cloud Plattform
Migration von Aftersales Systemen auf eine Cloud Plattform
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Akzeptanz-Test getriebene Produktentwicklung
Akzeptanz-Test getriebene ProduktentwicklungAkzeptanz-Test getriebene Produktentwicklung
Akzeptanz-Test getriebene Produktentwicklung
 
Enterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue SchwarzEnterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue Schwarz
 
CLOUDSERVICES FÜR ISVs
CLOUDSERVICES FÜR ISVsCLOUDSERVICES FÜR ISVs
CLOUDSERVICES FÜR ISVs
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue Normal
 
Microservices - Was EAs zu Microservices wissen sollten
Microservices - Was EAs zu Microservices wissen solltenMicroservices - Was EAs zu Microservices wissen sollten
Microservices - Was EAs zu Microservices wissen sollten
 
Roadshow 2018 - Camunda in der Praxis: So geht's
Roadshow 2018 - Camunda in der Praxis: So geht'sRoadshow 2018 - Camunda in der Praxis: So geht's
Roadshow 2018 - Camunda in der Praxis: So geht's
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue Normal
 
Erp in der zukunft: über die funktionen hinaus
Erp in der zukunft: über die funktionen hinausErp in der zukunft: über die funktionen hinaus
Erp in der zukunft: über die funktionen hinaus
 
Technologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungTechnologieraum übergreifende Programmierung
Technologieraum übergreifende Programmierung
 
Citrix Day 2014: Swisscom Dynamic Workplace Framework
Citrix Day 2014: Swisscom Dynamic Workplace FrameworkCitrix Day 2014: Swisscom Dynamic Workplace Framework
Citrix Day 2014: Swisscom Dynamic Workplace Framework
 
Continuous Delivery in ADF Projekten
Continuous Delivery in ADF ProjektenContinuous Delivery in ADF Projekten
Continuous Delivery in ADF Projekten
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
Citrix Day 2014: Panalpina - global und doch nah
Citrix Day 2014: Panalpina - global und doch nahCitrix Day 2014: Panalpina - global und doch nah
Citrix Day 2014: Panalpina - global und doch nah
 

Domain-Driven Design in der Praxis

  • 1. Domain Driven Design in der Praxis Michael Mirold, 22.10.2019
  • 3.
  • 4. ‣ "erfunden" 2004 durch Eric Evans ‣ Software-Modellierungs-Ansatz für fachlich komplexe Anwendungen ‣ etabliert Pattern-Sprache ‣ große Fan-Gemeinde
  • 5. DDD Grundideen Fokus auf "Core Domain" Kollaboration von Fachexperten und Entwicklern Etablierung einer gemeinsamen Sprache
  • 9. STRATEGIC DESIGN - UBIQUITOUS LANGUAGE "A language structured around the domain model and used by all team members within a bounded context to connect all the activities of the team with the software." UBIQUITOUS LANGUAGE
  • 10. STRATEGIC DESIGN - UBIQUITOUS LANGUAGE UBIQUITOUS LANGUAGE Developer Tester Business Analyst Product Owner Software- Dokumentation Requirements User Interfaces + Dokumentation Source-Code !!! Team- Kommunikation
  • 11. STRATEGIC DESIGN - UBIQUITOUS LANGUAGE IDEEN FÜR DIE PRAXIS Aufbau eines Glossars Vokabular für User Stories Verwendung im Source-Code ‣Möglichst eindeutige Begri ff sde fi nitionen ‣Beziehungen zu anderen Begri ff en erläutern ‣nicht nur Substantive, auch Verhalten und Eigenschaften ‣wie CRC-Karten
  • 12. STRATEGIC DESIGN - UBIQUITOUS LANGUAGE IDEEN FÜR DIE PRAXIS Aufbau eines Glossars Vokabular für User Stories Verwendung im Source-Code ‣Schon bei Anforderungsaufnahme "neue Sprache" verwenden ‣Aufkommen anderer Begri ff e hinterfragen und diskutieren
  • 13. STRATEGIC DESIGN - UBIQUITOUS LANGUAGE IDEEN FÜR DIE PRAXIS Aufbau eines Glossars Vokabular für User Stories Verwendung im Source-Code ‣Verwendung in • Variablen- und Methodennamen • Klassennamen • APIs • CSS-Klassen und HTML-Ids ‣Kontrolle in Code-Reviews
  • 15. STRATEGIC DESIGN - BOUNDED CONTEXT Streaming-Management BEISPIEL ZDF: WAS IST EIN STREAM? FSK-Regeln Geo-Location- Regeln Syncate Formitäten Playees Formanden Streamate Meta- Artefakte ?
  • 16. STRATEGIC DESIGN - BOUNDED CONTEXT WAS IST EIN STREAM? FSK-Regeln Geo-Location- Regeln Syncate Formitäten Playees Formanden Streamate Meta-Artefakte Streaming-Management Untertitel Teaser-Images Teaser- Texte Social- Media Links Formitäten Autor Assets Produktions-Id Mediathek CMS Video-Codec GOP-Size Audio- Codec Bitrate FPS Aspect Container Pixel-Density Encoding Cluster Das universelle Domain-Modell ist eine Illusion. teure
  • 17. STRATEGIC DESIGN - BOUNDED CONTEXT "A description of a boundary (typically a subsystem, or the work of a particular team) within which a particular model is de fi ned and applicable." BOUNDED CONTEXT
  • 19. STRATEGIC DESIGN - SUB DOMAINS Core Domain Der Teil des Unternehmens, um den sich alles dreht Volle DDD-Power, volle "Exzellenz" Support Domain Weniger wichtig als Core Domain "Muss funktionieren" (egal wie) Generic Subdomain Generisch, wird aber gebraucht Wenn möglich, zukaufen
  • 20. STRATEGIC DESIGN - CONTEXT MAP ZDF Mediathek Streaming Logic Encoding Stream Playout Börse Programm- daten Wetter Sportdaten Medien- forschung Teletext Newsletter Archiv Chats und Foren Suche Social Media Blog Content- Management OHS/PL ACL OHS Supplier 3sat Mediathek Phoenix Mediathek Tivi Mediathek Supplier Supplier Supplier Supplier "API"
  • 21. STRATEGIC DESIGN - SUB DOMAINS IDEEN FÜR DIE PRAXIS Pragmatisch bleiben ‣ DDD Tactical Design nur, wo es notwendig ist ‣ Support Domains auch per CRUD oder Transaction Script Nicht zu früh an Technik denken
  • 22. STRATEGIC DESIGN - SUB DOMAINS IDEEN FÜR DIE PRAXIS Pragmatisch bleiben ‣ Sub-Domains beschreiben "Problem Space", d.h. das Business ‣ Bounded Contexts beschreiben "Solution Space", d.h. die Realisierung ‣ Business-Anforderungen sind die Grundlage Nicht zu früh an Technik denken
  • 24. TACTICAL DESIGN - ÜBERSICHT Bounded Context "TestManagement" Start TestRun Abort TestRun Handle DeviceReady HandleTestRun Timedout Application Service Aggregate TestRunStarted TestRunFailed TestRunFinished TestRunTimedout Domain Event TestRun Con fi guration Ticket TestId TestRun State UserId DeviceId Value Object Identity TestScheduling Strategy Domain Service TestRun Repository TestRun Factory TestRun Entity
  • 25. TACTICAL DESIGN - AGGREGATES AGGREGATES: Zentrales Konzept im Domänenmodell Aggregate Root Entity Value Object Entity Value Object Entity Value Object
  • 26. TACTICAL DESIGN - AGGREGATES AGGREGATE: Zentrales Konzept im Domänenmodell Aggregate Root Entity Value Object Entity Value Object Entity Value Object ‣ Aggregat: zusammenhängende Menge an Objekten ‣ Aggregat muss zu jedem Zeitpunkt valide und fachlich konsistent sein ➡ "Consistency Boundary" ‣ auf Aggregat kann von außen nur über "Aggregate Root" zugegri ff en werden • innere Objekte von außen nicht einzeln ansprechbar ‣ Aggregat ist Basis für Transaktionalität
  • 27. TACTICAL DESIGN - AGGREGATES TIPPS AGGREGATE DESIGN Aggregate klein halten ‣ Aggregate richtig schneiden ist schwierig ‣ Falsche Entscheidung kann u.a. Skalierbarkeit verschlechtern Eine Transaktion - ein Aggregat Aggregat-Referenz via Id Aggregate gut wählen
  • 28. TACTICAL DESIGN - AGGREGATES TIPPS AGGREGATE DESIGN Aggregate klein halten ‣ Sind Aggregate zu groß, drohen Concurrency- Probleme ‣ Oftmals ein Zeichen für falsche Modellierung ‣ an die (wesentlichen) Usecases denken Eine Transaktion - ein Aggregat Aggregat-Referenz via Id Aggregate gut wählen
  • 29. TACTICAL DESIGN - AGGREGATES TIPPS AGGREGATE DESIGN Aggregate klein halten ‣ Verbessert Skalierbarkeit ‣ Spiegelt die Grundidee von Aggregaten wider ‣ "Daumenregel" Eine Transaktion - ein Aggregat Aggregat-Referenz via Id Aggregate gut wählen
  • 30. TACTICAL DESIGN - AGGREGATES TIPPS AGGREGATE DESIGN Aggregate klein halten ‣ Ids sind fachliche Modellobjekte ‣ keine Java-Referenzen ‣ keine Foreign-Key-Beziehungen in der DB Eine Transaktion - ein Aggregat Aggregat-Referenz via Id Aggregate gut wählen Aggregat-Persistenz durch Document-Stores bietet sich an
  • 32. ARCHITECTURE - HEXAGONAL ARCHITECTURE ‣ Hexagon realisiert Bounded Context ‣ Alternative zu Schicht-Architektur ‣ Dependency-Inversion-Prinzip (Bob Martin): "Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions." "High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g. interfaces)."
  • 33. ARCHITECTURE - HEXAGONAL ARCHITECTURE POST /tests 1
  • 34. 2 create CreateTestCmd Test Repo Test Factory Test Repository 4 create new Test 6 add Test 7 publish TestCreated event 8 handle TestCreated event 9 send noti fi cation to user 5 validate new Test execute CreateTestCmd 3
  • 35. ARCHITECTURE - HEXAGONAL ARCHITECTURE Bounded Context Hexagonal-Architektur + Gute Basis für Microservices • hohe organisatorische Isolation (Conway's Law) • hohe technische Isolation (Aggregate als technische Transaktionsinseln)
  • 37. ARCHITECTURE - CQRS Anwendung modi fi zierender und lesender Call rein modi fi zierender Call rein lesender Call ANWENDUNG MIT "NORMALEM" SCHICHTENMODELL Remote Facade Application Services Business Logic Data Access Client 2 Client 3 Client 4 Client 5 Client 1
  • 38. ARCHITECTURE - CQRS EIN "NORMALES" SCHICHTENMODELL: PROBLEME ‣"One size fi ts it all" ‣Neue Clients benötigen oft neue Sichten auf Daten ‣In fl ation von DTOs und Schnittstellen ‣Performance-Optimierung immer schwieriger wegen unterschiedlicher Anforderungen ‣Changes am Model immer aufwändiger Remote Facade Application Services Business Logic Data Access Client 1 Client 2 Client 3 Client 4 Client 5
  • 39. ARCHITECTURE - CQRS CQRS: Trennung von Command- und Query-Models Application Services Business Logic Data Access Remote Facade Client 1 Client 2 Client 3 Client 4 Client 5 Remote Facade Query Service Data Access Remote Facade Query Service Data Access Remote Facade Query Service Data Access Command Model Query Model B Query Model C Query Model D Query Model A Remote Facade Query Service Data Access DomainEvent DomainEvent
  • 40. ARCHITECTURE - CQRS CQRS: Command / Query Responsibility Segregration Vorteile ‣ Read-Models können extrem einfach sein, z.B. • vollständig denormalisierte SQL- Tabellen (bzw. Materialized Views) • ... oder Document Stores ‣ Read-Models erlauben einfache Skalierung und Performance-Optimierung ‣ möglicherweise komplexe Mechanik: Messaging, Apache Kafka etc. ‣ nur "eventual consistency": muss auf Applikations-Ebene kompensiert werden ‣ Full-Rebuild von Query-Models muss eingeplant werden und oft teuer (analog zu Seach-Feeder) Nachteile
  • 43. WIE GEHTS WEITER? Functional DDD DDD und Prozess Event Sourcing
  • 44. LITERATUR 💆 👍 👨🔬 🔧 ⏲ ⏲ 😍 👨🔬 👍 👍