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

Domain-Driven Design (Talk)

Domain-Driven Design (Talk)

Zuletzt auf dem DevCamp 2019

Henning Schwentner

November 22, 2019
Tweet

More Decks by Henning Schwentner

Other Decks in Programming

Transcript

  1. Starring With
    Directed by
    In the role of
    Also Starring

    View Slide

  2. View Slide

  3. View Slide

  4. @hschwentner
    Domain-Driven Design

    View Slide

  5. @hschwentner
    #dddesign

    View Slide

  6. @hschwentner
    Was ist das
    für 1 Design?

    View Slide

  7. @hschwentner
    Vong Domain her

    View Slide

  8. -DRIVEN DESIGN

    View Slide

  9. View Slide

  10. HENN1NG

    View Slide

  11. Schw3ntn3r

    View Slide

  12. View Slide

  13. @hschwentner

    View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. @hschwentner
    speakerdeck.com/hschwentner

    View Slide

  19. Quelle: http://www.schulbilder.org/malvorlage-informatiker-i10418.html

    View Slide

  20. View Slide

  21. @hschwentner
    16th of May, 1979

    View Slide

  22. Foto: Henning Schwentner

    View Slide

  23. View Slide

  24. Fritz&
    Franz&
    Lothar&
    Philipp.

    View Slide

  25. View Slide

  26. View Slide

  27. View Slide

  28. Foto: Steindy/Wikipedia

    View Slide

  29. View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. Vong WPS her
    Foto: Lotse/Wikipoedia

    View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. View Slide

  39. View Slide

  40. View Slide

  41. View Slide

  42. View Slide

  43. Wilhelm Paula Siegfried
    Foto: Lotse/Wikipoedia

    View Slide

  44. Foto: J. Rost

    View Slide

  45. »Business-Software
    die Spaß macht«

    View Slide

  46. View Slide

  47. »Business-Software
    die Spaß macht«

    View Slide

  48. View Slide

  49. View Slide

  50. @hschwentner
    Contents

    View Slide

  51. View Slide

  52. @hschwentner
    #unabsteigbar

    View Slide

  53. “Football is a simple game;
    22 men chase a ball for
    90 minutes and at the end,
    the Germans win.”
    Gary Lineker

    View Slide

  54. @hschwentner
    Don’t repeat yourself
    Don’t repeat yourself
    Don’t repeat yourself

    View Slide

  55. View Slide

  56. Domain Model
    Building Blocks Domain Event
    Aggregate
    Entity
    Value Object
    Bounded Context
    Strategic Design
    Context Mapping
    Ubiquitous Language
    Domain Expert
    Event Storming
    Tactical Design
    Domain Storytelling
    Core Domain

    View Slide

  57. Microservices
    CQRS
    Hexagonal Architecture
    Agile
    Event Sourcing
    Extreme Programming
    Scrum
    Cloud
    Self-Contained Sytems
    Verticals
    Clean Architecture
    DevOps AWS
    Azure

    View Slide

  58. History

    View Slide

  59. Blue Book
    Red Book
    2015 ’16 ’17
    ’14
    ’13
    ’12
    2010 ’11
    ’09
    ’08
    ’07
    ’06
    2005
    ’04
    ’03
    ’02
    2000 01
    ’99
    ’98

    View Slide

  60. Conways Law Blue Book
    Red Book
    2015 ’16 ’17
    ’14
    ’13
    ’12
    2010 ’11
    ’09
    ’08
    ’07
    ’06
    2005
    ’04
    ’03
    ’02
    2000 01
    1968
    ...
    ’99
    ’98

    View Slide

  61. View Slide

  62. View Slide

  63. View Slide

  64. View Slide

  65. Grafik: Robert Gloth/Wikipedia

    View Slide

  66. View Slide

  67. Foto: Serge Melki/Wikipedia

    View Slide

  68. Foto: Public Domain/Wikipedia

    View Slide

  69. View Slide

  70. @hschwentner
    How is that supposed to work?

    View Slide

  71. View Slide

  72. View Slide

  73. Foto: Thorsten Bätge/Wikipedia

    View Slide

  74. View Slide

  75. View Slide

  76. Detail: Tiefenzahl

    View Slide

  77. Foto: Afrank99/Wikipedia

    View Slide

  78. Foto: Afrank99/Wikipedia

    View Slide

  79. Foto: Henning Schwentner

    View Slide

  80. View Slide

  81. View Slide

  82. View Slide

  83. View Slide

  84. View Slide

  85. LEGT
    NAUTIKER KAPITÄN
    FRAGT NACH
    7
    SCHIFFS-
    SILHOUETTE
    AUF
    PEILDIENST
    PEILSCHIFF
    TIEFE
    PEILT
    1
    SENDET
    2
    AN
    BERECHNET
    3
    ERZ
    EUGT
    4
    SENDET
    5
    PEILPLAN
    AN
    VERSCHIEBT &
    DREHT
    8
    SCHIFFS-
    SILHOUETTE
    UND
    FINDET
    9
    MELDET AN
    6
    ROUTE
    ROUTE
    PEILPLAN
    PEILPLAN
    TIEFEN-
    ZAHLEN
    ROUTE
    TIEFENLINIEN

    View Slide

  86. @hschwentner
    Is There An App For It?

    View Slide

  87. View Slide

  88. View Slide

  89. CYBER

    View Slide

  90. View Slide

  91. View Slide

  92. View Slide

  93. View Slide

  94. View Slide

  95. View Slide

  96. @hschwentner
    Software != End in itself

    View Slide

  97. View Slide

  98. ?

    View Slide

  99. View Slide

  100. WICHTIG!

    View Slide

  101. View Slide

  102. Software
    Domäne

    View Slide

  103. View Slide

  104. View Slide

  105. View Slide

  106. Domain
    Knowledge

    View Slide

  107. Collaborative
    Modeling

    View Slide

  108. Domain
    Expert
    Developer

    View Slide

  109. Knowledge crunching

    View Slide

  110. View Slide

  111. @hschwentner
    Tools

    View Slide

  112. View Slide

  113. http://www.domainstorytelling.org

    View Slide

  114. LANGUAGE

    View Slide

  115. View Slide

  116. @hschwentner
    Fach-
    sprache
    Domain
    Expert
    Developer

    View Slide

  117. Ludwig WiCgenstein
    »Wovon man nicht
    sprechen kann, darüber
    muss man schweigen.«

    View Slide

  118. View Slide

  119. View Slide

  120. @hschwentner
    Technische Sprache

    View Slide

  121. @hschwentner
    Auf den
    Feature
    Branch
    pushen?
    Fahr‘ den
    Container
    hoch!
    Ich baue
    dafür ein
    Interface

    View Slide

  122. X
    Class
    Database
    Server
    Client
    O/R-Mapping
    Inheritance
    A
    B
    Method
    Interface
    Linux
    Windows
    Eclipse
    Visual Studio

    View Slide

  123. View Slide

  124. @hschwentner
    Domain Language

    View Slide

  125. @hschwentner
    Fachsprache

    View Slide

  126. @hschwentner
    Container
    Containernummer
    4300
    Kran
    Twistlock
    Frachtbrief

    View Slide

  127. @hschwentner

    View Slide

  128. View Slide

  129. @hschwentner
    Fachbegriff
    Fachbegriff

    View Slide

  130. @hschwentner
    Technik
    Technik

    View Slide

  131. Ubiquitous Language

    View Slide

  132. Jubikjutuss Lengwitsch

    View Slide

  133. Allgegenwärtige Sprache

    View Slide

  134. Ubiquitäre Sprache

    View Slide

  135. LEGT
    NAUTIKER KAPITÄN
    FRAGT NACH
    7
    SCHIFFS-
    SILHOUETTE
    AUF
    PEILDIENST
    PEILSCHIFF
    TIEFE
    PEILT
    1
    SENDET
    2
    AN
    BERECHNET
    3
    ERZ
    EUGT
    4
    SENDET
    5
    PEILPLAN
    AN
    VERSCHIEBT &
    DREHT
    8
    SCHIFFS-
    SILHOUETTE
    UND
    FINDET
    9
    MELDET AN
    6
    ROUTE
    ROUTE
    PEILPLAN
    PEILPLAN
    TIEFEN-
    ZAHLEN
    ROUTE
    TIEFENLINIEN

    View Slide

  136. Peilplan

    View Slide

  137. Peilplan

    View Slide

  138. Peilplan

    View Slide

  139. Peil-
    plan

    View Slide

  140. public class Peilplan
    {
    //...
    }

    View Slide

  141. @hschwentner
    Peilplan
    public class Peilplan
    {
    //...
    }
    Peilplan
    Peilplan

    View Slide

  142. “There are only two hard things in Computer Science:
    cache invalidation and naming things.”
    Phil Karlton

    View Slide

  143. “There are only two hard things in Computer Science:
    cache invalidaNon, naming things,
    and off-by-one errors.”
    Phil Karlton

    View Slide

  144. SMALL

    View Slide

  145. View Slide

  146. View Slide

  147. public class Silhouette
    {
    //...
    }

    View Slide

  148. View Slide

  149. public class Silhouette
    {
    public void verschiebeUm(Laenge l)
    //...
    }

    View Slide

  150. View Slide

  151. public class Silhouette
    {
    public void verschiebeUm(Laenge l)
    //...
    public void dreheUm(Winkel w)
    //...
    }

    View Slide

  152. Erich Gamma
    “Program to an interface,
    not to an implementation”

    View Slide

  153. public class Silhouette
    {
    public void setPosition(Position p)
    //...
    }

    View Slide


  154. View Slide

  155. WARNING
    SETTERS
    CAUSE
    MODEL
    ANEMIA

    View Slide

  156. VERSCHIEBT &
    DREHT
    8
    SCHIFFS-
    SILHOUETTE
    UND
    FINDET ROUTE
    NAUTIKER
    <>
    Silhouette
    verschiebe()
    drehe()

    View Slide

  157. BIG

    View Slide

  158. ?

    View Slide

  159. ?

    View Slide

  160. ?

    View Slide

  161. View Slide

  162. View Slide

  163. View Slide

  164. View Slide

  165. @hschwentner
    “Whoever uses a canonical model
    has lost control over his life.”
    – Karl Lagerfeld

    View Slide

  166. @hschwentner
    »Wer ein kanonisches
    Domänenmodell einsetzt, hat die
    Kontrolle über sein Leben verloren«
    – Karl Lagerfeld

    View Slide

  167. View Slide

  168. View Slide

  169. View Slide

  170. View Slide

  171. View Slide

  172. View Slide

  173. View Slide

  174. Bounded Context

    View Slide

  175. View Slide

  176. Bewegung
    Kosmetik

    Gefühle

    View Slide

  177. PUTS
    NAVIGATING
    OFFICER
    CAPTAIN
    ASKS FOR
    7
    SHIP
    SILHOUETTE
    ON
    CARTO-GRAPHER
    SOUNDING SHIP
    DEPTH
    MEASURES
    1
    SENDS
    2
    TO
    CALCULATES
    3
    DRAW
    S
    4
    SENDS
    5
    DEPTH MAP
    TO
    MOVES & TURNS
    8
    SHIP SLHOETTE
    TO FIND
    9
    DISCUSSES WITH
    6
    ROUTE
    ROUTE
    DEPTH MAP
    DEPTH MAP
    DEPTH (RAW)
    ROUTE
    CONTOUR
    LINES
    DEPTH
    MEASURE-
    MENT
    MANEUVER
    PLANNING
    MANEUVER
    PLANNING
    DEPTH
    MEASUERE-
    MENT

    View Slide

  178. View Slide

  179. View Slide

  180. View Slide

  181. @hschwentner
    Do I get a car for this?

    View Slide

  182. View Slide

  183. View Slide

  184. CUSTOMER
    TELLS WISH FOR
    1
    SALES-PERSON
    SIGNS
    TO
    GIVES
    FOR
    CONTRACT
    3
    RISIK MANAGER
    CONTRACT
    PASSES ON
    TO
    4
    CONTRACT
    VOTES
    CHECKS
    CALCULATES
    5
    6
    7
    CALCU-
    LATES
    TO
    8
    2
    CAR
    CREDIT
    RATING
    INSTALLMENT
    CAR
    RESALE
    VALUE
    CONTRACT

    View Slide

  185. CUSTOMER
    SIGNS
    CONTRACT
    3
    RISK MANAGER
    CONTRACT
    VOTES
    7
    <>
    LeasingContract
    sign()
    vote()

    View Slide

  186. <>
    LeasingContract
    sign()
    vote()

    View Slide

  187. <>
    LeasingContract
    sign()
    vote()
    extend()
    terminate()
    sell_to_refinance()

    View Slide

  188. @hschwentner
    The One Big Model

    View Slide

  189. View Slide

  190. View Slide

  191. @hschwentner
    Reality:
    Not one big model
    But several mixed models

    View Slide

  192. @hschwentner
    Reality:
    Not one big model
    But several mixed models

    View Slide

  193. BBOM
    Foto: Benutzer:Summi/Wikipedia/CC-BY-SA-3.0-migrated

    View Slide

  194. View Slide

  195. CUSTOMER
    TELLS WISH FOR
    1
    SALES-PERSON
    SIGNS
    TO
    GIVES
    FOR
    CONTRACT
    3
    RISIK MANAGER
    CONTRACT
    PASSES ON
    TO
    4
    CONTRACT
    VOTES
    CHECKS
    CALCULATES
    5
    6
    7
    CALCU-
    LATES
    TO
    8
    2
    CAR
    CREDIT
    RATING
    INSTALLMENT
    CAR
    RESALE
    VALUE
    CONTRACT
    SALES
    RISK MANAGMENT
    SALES
    RISK MANAGMENT

    View Slide

  196. <>
    LeasingContract
    sign()
    vote()

    View Slide

  197. <>
    LeasingContract
    sign()
    <>
    LeasingContract
    vote()

    View Slide

  198. <>
    LeasingContract
    sign()
    vote()

    View Slide

  199. <>
    LeasingContract
    sign()
    <>
    LeasingContract
    vote()

    View Slide

  200. <>
    LeasingContract
    sign()
    <>
    LeasingContract
    vote()
    SALES
    RISK
    MANAGEMENT

    View Slide

  201. @hschwentner
    Ubiquitous Language
    <=>
    Bounded Context

    View Slide

  202. Ludwig Wittgenstein
    »Die Grenzen
    meiner Sprache bedeuten
    die Grenzen meiner Welt«

    View Slide

  203. TIEFEN-
    MESSUNG
    PEIL-
    SCHIFF
    TIEFEN-
    ZAHL
    MARKIER-
    UNG
    PEIL-
    PLAN
    TIEFEN-
    ZAHL
    MANÖVERPLANUNG

    View Slide

  204. TIEFENZAHL
    TIEFE AN EINEM
    BESTIMMTEN ORT
    UNTER BERÜCKSICHTIGUNG
    VON EBBE UND FLUT
    TIEFENZAHL
    PER ECHOLOT GEMESSENE
    TIEFE BEI NORMALNULL
    MANÖVER-
    PLANUNG
    TIEFENMESSUNG

    View Slide

  205. @hschwentner
    Strategic Design
    Ubiquitous Language
    Tactical Design

    View Slide

  206. View Slide

  207. View Slide

  208. @hschwentner
    Collaborative Modeling

    View Slide

  209. View Slide

  210. View Slide

  211. MANÖVER
    SIMULIERT
    ZOOM-
    STUFEN BE-
    RECHNET
    TIEFE
    GEPEILT
    TIEFE AN
    PEILDIEINST
    GEMELDET PEILPLAN
    GEDRUCKT
    TIEFEN-LINIEN
    ERSTELLT
    SILHOUETTE
    AUF
    ÖSTLICHE
    RICHTUNG
    GEDREHT
    SILHOUETTE
    300M
    BEWEGT
    SILHOUETTE
    DER LÄNGE
    100M
    ERSTELLT
    DAS AUS-
    SCHNEIDEN
    NERVT!
    HIER
    PASSAGE
    BERÜCK-
    SICHTIGEN!
    BESONDERE
    VER-FLACHUNG
    GEMELDET
    KOMMT PER
    TELEFON

    View Slide

  212. CHAOS

    View Slide

  213. http://www.domainstorytelling.org

    View Slide

  214. PUTS
    NAVIGATING
    OFFICER
    CAPTAIN
    ASKS FOR
    7
    SHIP
    SILHOUETTE
    ON
    CARTO-GRAPHER PEILSCHIFF DEPTH
    MEASURES
    1
    SENDS
    2
    TO
    CALCULATES
    3
    DRAWS
    4
    SENDS
    5
    DEPTH MAP
    TO
    MOVES & TURNS
    8
    SHIP
    SILHOUETTE
    TO FIND
    9
    DISCUSSES WITH
    6
    ROUTE
    ROUTE
    DEPTH MAP
    DEPTH MAP
    DEPTH (RAW)
    ROUTE
    CONTOUR
    LINES

    View Slide

  215. LEGT
    NAUTIKER KAPITÄN
    FRAGT NACH
    7
    SCHIFFS-
    SILHOUETTE
    AUF
    PEILDIENST PEILSCHIFF TIEFE
    PEILT
    1
    SENDET
    2
    AN
    BERECHNET
    3
    ERZEUGT
    4
    SENDET
    5
    PEILPLAN
    AN
    VERSCHIEBT &
    DREHT
    8
    SCHIFFS-
    SILHOUETTE
    UND
    FINDET
    9
    MELDET AN
    6
    ROUTE
    ROUTE
    PEILPLAN
    PEILPLAN
    TIEFEN-
    ZAHLEN
    ROUTE
    TIEFENLINIEN

    View Slide

  216. View Slide

  217. => Next slide deck

    View Slide

  218. @hschwentner
    Tactical Design

    View Slide

  219. View Slide

  220. Entity

    View Slide

  221. AKA: Business Object

    View Slide

  222. View Slide

  223. View Slide

  224. @hschwentner
    Identity

    View Slide

  225. View Slide

  226. View Slide

  227. Foto: Th.omas G.Graf/Wikipedia
    oto: H. Schwentner

    View Slide

  228. Grafik: Pixabay

    View Slide

  229. Foto: Bernd Schwabe in Hannover/Wikipedia

    View Slide

  230. @hschwentner
    Entity:
    *Identity
    *Lifecycle
    *(mutable state)

    View Slide

  231. View Slide

  232. Versicherungspolice
    Urlaubsantrag
    Baumaßnahme
    Kaufvertrag
    Fahrauftrag

    View Slide

  233. Value Object

    View Slide

  234. Foto: Public Domain/Pixabay

    View Slide

  235. Grafik: Public Domain/Pixabay

    View Slide

  236. Foto: A. Markiewicz

    View Slide

  237. View Slide

  238. View Slide

  239. @hschwentner
    Value:
    *No identity
    *immutable

    View Slide

  240. Beispiel: Tiefenzahl

    View Slide

  241. Postleitzahl
    GPS-Koordinate
    IBAN
    Containernummer
    IATA-Code

    View Slide

  242. Domain Event

    View Slide

  243. Domain
    Event

    View Slide

  244. MANÖVER-
    PLANUNG
    TIEFEN-MESSUNG
    PEILPLAN
    ERSTELLT

    View Slide

  245. @hschwentner
    WAM

    View Slide

  246. View Slide

  247. View Slide

  248. Entwurfsmetaphern

    View Slide

  249. Foto: Dallas Museum of Art/Wikipedia

    View Slide

  250. Foto: Christoph Michels/Wikipedia

    View Slide

  251. Material

    View Slide

  252. Foto: MrX/Wikipedia

    View Slide

  253. Foto: Silsor/Wikipedia

    View Slide

  254. Werkzeug

    View Slide

  255. Foto: Wolfgagn Lonien/Wikipedia

    View Slide

  256. Automat

    View Slide

  257. @hschwentner
    Material == Entity

    View Slide

  258. @hschwentner
    Material == passiv

    View Slide

  259. Foto: Christoph Michels/Wikipedia

    View Slide

  260. Foto: MrX/Wikipedia

    View Slide

  261. @hschwentner
    == aktiv

    View Slide

  262. View Slide

  263. View Slide

  264. Foto: Svdmolen/Wikipedia

    View Slide

  265. View Slide

  266. @hschwentner
    Strategic Design

    View Slide

  267. View Slide

  268. View Slide

  269. View Slide

  270. View Slide


  271. View Slide

  272. View Slide

  273. View Slide

  274. View Slide

  275. View Slide

  276. Team Kopf
    Team Schwanz
    Team Rumpf
    Team Beine

    View Slide

  277. Team Emma
    Team Berta
    Team Erna
    Team Lisl

    View Slide

  278. TIDE-
    VORHER-
    SAGE
    MANÖVER-
    PLANUNG
    TIEFEN-
    MESSUNG

    View Slide

  279. Team Emma
    Team Berta
    Team Erna
    Team Lisl

    View Slide

  280. Team Emma
    Team Berta
    Team Erna
    Team Lisl

    View Slide

  281. View Slide

  282. View Slide

  283. TIDE-
    VORHER-
    SAGE
    MANÖVER-
    PLANUNG
    TIEFEN-
    MESSUNG

    View Slide

  284. View Slide

  285. View Slide

  286. “OrganizaNons which design systems
    are constrained to produce designs
    which are copies of the
    communicaNon structures of
    these organizaNons.”
    Melvin Conway

    View Slide

  287. “The organization of the software and
    the organization of the software team
    will be congruent.”
    Eric Raymond

    View Slide

  288. “If you have four groups working on a compiler,
    you'll get a 4-pass compiler.”
    Eric Raymond

    View Slide

  289. View Slide

  290. View Slide

  291. Micro-
    service A
    UI
    EnWWes
    Value
    Objects
    Services
    Micro-
    service B
    UI
    Entities
    Value
    Objects
    Services
    Micro-
    service C
    UI
    Entities
    Value
    Objects
    Services

    View Slide

  292. Micro-
    service A
    PräsentaWons-
    Schicht
    Fachdomänen-
    Schicht
    Infrastruktur-
    Schicht
    ApplikaWons-
    Schicht
    Micro-
    service B
    Direkter
    Zugriff
    Auf die DB
    Micro-
    service C

    View Slide

  293. Team Emma
    Team Berta
    Team Erna
    Team Lisl

    View Slide

  294. Team Emma
    Team Berta
    Team Erna
    Team Lisl

    View Slide

  295. Team Emma
    Team Berta
    Team Erna
    Team Lisl

    View Slide


  296. View Slide

  297. View Slide

  298. View Slide

  299. View Slide

  300. Simon Brown

    View Slide

  301. Distributed
    Big Ball Of Mud
    Modulith Microservices
    Monolithic
    Big Ball Of Mud

    View Slide

  302. View Slide

  303. View Slide

  304. @hschwentner
    What now?

    View Slide

  305. @DDDger
    https://dddgermany.herokuapp.com

    View Slide

  306. View Slide

  307. @hschwentner
    LeasingNinja.io

    View Slide

  308. Workshop
    Domain-Driven Design konkret
    wps.de/ddd

    View Slide

  309. @hschwentner
    Foto: Henning Schwentner

    View Slide

  310. @hschwentner
    Consulting

    View Slide

  311. @hschwentner
    Literature

    View Slide

  312. @hschwentner
    speakerdeck.com/hschwentner

    View Slide

  313. Foto: H. Schwentner

    View Slide

  314. Foto: H. Schwentner

    View Slide

  315. Foto: Amazon

    View Slide

  316. View Slide

  317. View Slide

  318. 15$ online:
    leanpub.com/domainstorytelling
    Gratis hier am
    Stand von dpunkt
    Einführung mit allem
    was man wissen muss
    Überblick
    Rabatt!
    https://leanpub.com/domainstorytelling/c/dddkonkret

    View Slide

  319. View Slide

  320. View Slide

  321. View Slide

  322. View Slide

  323. View Slide

  324. View Slide

  325. View Slide

  326. Henning Schwentner
    @hschwentner
    [email protected]
    DDD
    DDD
    Slides: speakerdeck.com/hschwentner
    Book: leanpub.com/domainstorytelling

    View Slide