Slide 1

Slide 1 text

DomainDriven Design Overview

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

1. The Conventional Approach

Slide 4

Slide 4 text

1.1. Software development process ? Problem Discussion Design Code Run

Slide 5

Slide 5 text

1.2. Responsibilities defined by conventional Devs ? Problem Discussion Design Code Run

Slide 6

Slide 6 text

1.3. Knowledge distribution [IESAB]

Slide 7

Slide 7 text

1.4. Limits of scalability

Slide 8

Slide 8 text

1.5. Accidential Complexity Utils Libs Model UI Components Persistence 1 Persistence 3 Model Feature

Slide 9

Slide 9 text

1.6. Wrong Vision

Slide 10

Slide 10 text

1.7.1 Misunderstanding „Apache“

Slide 11

Slide 11 text

1.7.2 Misunderstanding “It’s developers’ (mis)understanding, not expert knowledge that gets released in production.” - Alberto Brandolini -

Slide 12

Slide 12 text

1.8. Upfront Design [PPPDDD]

Slide 13

Slide 13 text

1.9. Communication Structures “Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations.” - Conway’s Law -

Slide 14

Slide 14 text

2. Beyond the Conventional Approach

Slide 15

Slide 15 text

2.1.1. Responsibilities defined by DevOps “You build it, you run it” - Werner Vogels -

Slide 16

Slide 16 text

2.1.2. Responsibilities defined by DevOps ? Problem Discussion Design Code Run

Slide 17

Slide 17 text

3. DomainDriven Design to the rescue

Slide 18

Slide 18 text

3.1. Responsibilities defined by DomainDriven Design ? Problem Discussion Design Code Run

Slide 19

Slide 19 text

3.2. History of literature 2003 2013 2016 2015 2019

Slide 20

Slide 20 text

3.3. Elements of DomainDriven Design • Strategic Design adresses a top-down approach by breaking complexity down from domains to subdomain and further down to Bounded Contexts. • Tactical Design, on the other hand, can be used for bottum-up analysis and design since it has a focus in finer grained building blocks like Value Objects, Entities or Aggregates. [HODDDBE]

Slide 21

Slide 21 text

3.4. Model Exploration Whirlpool

Slide 22

Slide 22 text

4. Strategic Design

Slide 23

Slide 23 text

4.1.1. Problem Space ? Problem Discussion Design Code Run Problem Space

Slide 24

Slide 24 text

4.1.2. Problem Space Context of wider business Problem Domain

Slide 25

Slide 25 text

4.2. Ubiquitous Language [AODDDBSM]

Slide 26

Slide 26 text

4.3. Knowledge Crunching [PPPDDD]

Slide 27

Slide 27 text

4.4. Domain Subdomain Subdomain Subdomain Subdomain Subdomain

Slide 28

Slide 28 text

4.5. Focus on the Core Domain [AODDDBSM]

Slide 29

Slide 29 text

4.6. Subdomains Core Domain Generic Domain Support Domain Support Domain Generic Domain

Slide 30

Slide 30 text

5. Techniques for Knowledge Crunching

Slide 31

Slide 31 text

4.1. Event Storming [IESAB]

Slide 32

Slide 32 text

5.2. Domain Storytelling [DSSHHS]

Slide 33

Slide 33 text

5.3. User Story Mapping [USMJP]

Slide 34

Slide 34 text

5.4. Example Mapping [EMMW]

Slide 35

Slide 35 text

5.5. Behavior-Driven Design [BDDWiki]

Slide 36

Slide 36 text

5.6. Impact Mapping [IMTK]

Slide 37

Slide 37 text

5.7. Wardly Map [WMSW]

Slide 38

Slide 38 text

5.8. Business Model Canvas [15YDDD]

Slide 39

Slide 39 text

6. Tactical Design

Slide 40

Slide 40 text

6.1. Solution Space ? Problem Discussion Design Code Run Solution Space

Slide 41

Slide 41 text

6.2. Solution Space [PPPDDD]

Slide 42

Slide 42 text

6.3.1. Domain Model [AODDDBSM]

Slide 43

Slide 43 text

6.3.2. Domain Model „All models are wrong, but some are useful“ - George E. P. Box -

Slide 44

Slide 44 text

6.4. Bounded Context

Slide 45

Slide 45 text

6.5. Context Mapping • Open-host Service • Published Language • Conformist • Customer / Supplier • Anticorruption Layer • Shared Kernel • Big Ball of Mud • Partnership • Seperate Ways

Slide 46

Slide 46 text

6.6. Context Map [HODDDBE]

Slide 47

Slide 47 text

6.7. Building Blocks [HODDDBE]

Slide 48

Slide 48 text

6.8. Model Exploration Whirlpool [PPPDDD]

Slide 49

Slide 49 text

6.9. History of concepts 2003 2005 Event Sourcing 2010 Command
 Query
 Responsibility
 Segregation Micro Service Self
 Contained
 System Distributed
 DDD 2015 2011 Workshop of Software
 Architects 2005 Hexagonal Architecture DomainDriven
 Design

Slide 50

Slide 50 text

6.10. Self-Contained Systems [SCSWEB]

Slide 51

Slide 51 text

6.11. Hexagonal Architecture

Slide 52

Slide 52 text

6.12. Scalability with Bounded Contexts

Slide 53

Slide 53 text

6.13. Organisational Structure „In other words, your application‘s architecture mirrors the structure of the organization that developed it. It is important, therefore, to apply Conway‘s Law in reverse and design your organisation so that its structure mirrors your microservice architecture.“ - Chris Richardson -

Slide 54

Slide 54 text

7. Beyond DomainDriven Design

Slide 55

Slide 55 text

7.1.1. Responsibilities defined by DDD & DevOps "You design it, you build it, 
 and then you run it“ - Michael Plöd -

Slide 56

Slide 56 text

7.1.2. Responsibilities defined by DDD & DevOps ? Problem Discussion Design Code Run

Slide 57

Slide 57 text

End of presentation

Slide 58

Slide 58 text

Thank you! • Markus Hanses • @markushanses • [email protected]

Slide 59

Slide 59 text

Sources 1 • [DLWEB], Documentation, https://domainlanguage.com/ddd/whirlpool/ • [MFESWEB], Event Sourcing, https://martinfowler.com/eaaDev/EventSourcing.html • [MIROWEB], Miro Application, https://miro.com • [AKWEB], Presentation, https://www.slideshare.net/aslamkhn/experiments-in-reasoning-227676025 • [GYCQRSWEB], CQRS, https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf • [ISAWEB], ISA Principles, https://isa-principles.org/ • [DDDWiki], DomainDriven Design, https://en.wikipedia.org/wiki/Domain-driven_design • [SCSWEB], Self Contained System, http://scs-architecture.org/ • [IESAB], Introducing EventStorming, Alberto Brandolini, leanpub.com • [DSSHHS], Domain Storytelling, Stefan Hofer, Henning Schwentner, leanpub.com • [USMJP], User Story Mapping, https://www.jpattonassociates.com/user-story-mapping/ • [EMMW], Example Mapping, https://cucumber.io/blog/bdd/example-mapping-introduction/ • [IMTK], Impact Mapping, https://blog-de.akquinet.de/2016/12/14/von-der-loesung-zum-problem- impact-mapping-mal-anders-herum/ • [WMSW], Wardly Map,https://medium.com/wardleymaps • [BDDWiki], Behavior-Driven Design, https://en.wikipedia.org/wiki/Behavior-driven_development • [HAWiki], Hexagonal Architecture, https://en.wikipedia.org/wiki/Hexagonal_architecture_(software) • [HAAC], Hexagonal Architecture, Alistair Cockburn, https://web.archive.org/web/20180822100852/ http://alistair.cockburn.us/Hexagonal+architecture • [15YDDD], DDD Europe, Domain-Driven Design: The First 15 Years, https://leanpub.com/ ddd_first_15_years

Slide 60

Slide 60 text

Sources 2 • [AODDDBSM] The Anatomy of Domain-Driven Design - Booklet, Samual Knight & Scott Millett, https://leanpub.com/theanatomyofdomain-drivendesign • [PPPDDD], „Patterns, Principles, and Practices of Domain-Driven Design“, ISBN: 978-1-118-71470-6 • [HODDDBE], Hands On Domain-driven Design by example, Michael Plöd, https:// leanpub.com/ddd-by-example