Save 37% off PRO during our Black Friday Sale! »

Domain-Driven Design (Talk)

Domain-Driven Design (Talk)

Zuletzt auf dem DevCamp 2019

575ca492bac55e895d0e1c86f7d709fe?s=128

Henning Schwentner

November 22, 2019
Tweet

Transcript

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

  2. None
  3. None
  4. @hschwentner Domain-Driven Design

  5. @hschwentner #dddesign

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

  7. @hschwentner Vong Domain her

  8. -DRIVEN DESIGN

  9. None
  10. HENN1NG

  11. Schw3ntn3r

  12. None
  13. @hschwentner

  14. None
  15. None
  16. None
  17. None
  18. @hschwentner speakerdeck.com/hschwentner

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

  20. None
  21. @hschwentner 16th of May, 1979

  22. Foto: Henning Schwentner

  23. None
  24. Fritz& Franz& Lothar& Philipp.

  25. None
  26. None
  27. None
  28. Foto: Steindy/Wikipedia

  29. None
  30. None
  31. None
  32. None
  33. Vong WPS her Foto: Lotse/Wikipoedia

  34. None
  35. None
  36. None
  37. None
  38. None
  39. None
  40. None
  41. None
  42. None
  43. Wilhelm Paula Siegfried Foto: Lotse/Wikipoedia

  44. Foto: J. Rost

  45. »Business-Software die Spaß macht«

  46. None
  47. »Business-Software die Spaß macht«

  48. None
  49. None
  50. @hschwentner Contents

  51. None
  52. @hschwentner #unabsteigbar

  53. “Football is a simple game; 22 men chase a ball

    for 90 minutes and at the end, the Germans win.” Gary Lineker
  54. @hschwentner Don’t repeat yourself Don’t repeat yourself Don’t repeat yourself

  55. None
  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
  57. Microservices CQRS Hexagonal Architecture Agile Event Sourcing Extreme Programming Scrum

    Cloud Self-Contained Sytems Verticals Clean Architecture DevOps AWS Azure
  58. History

  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
  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
  61. None
  62. None
  63. None
  64. None
  65. Grafik: Robert Gloth/Wikipedia

  66. None
  67. Foto: Serge Melki/Wikipedia

  68. Foto: Public Domain/Wikipedia

  69. None
  70. @hschwentner How is that supposed to work?

  71. None
  72. None
  73. Foto: Thorsten Bätge/Wikipedia

  74. None
  75. None
  76. Detail: Tiefenzahl

  77. Foto: Afrank99/Wikipedia

  78. Foto: Afrank99/Wikipedia

  79. Foto: Henning Schwentner

  80. None
  81. None
  82. None
  83. None
  84. None
  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
  86. @hschwentner Is There An App For It?

  87. None
  88. None
  89. CYBER

  90. None
  91. None
  92. None
  93. None
  94. None
  95. None
  96. @hschwentner Software != End in itself

  97. None
  98. ?

  99. None
  100. WICHTIG!

  101. None
  102. Software Domäne

  103. None
  104. None
  105. None
  106. Domain Knowledge

  107. Collaborative Modeling

  108. Domain Expert Developer

  109. Knowledge crunching

  110. None
  111. @hschwentner Tools

  112. None
  113. http://www.domainstorytelling.org

  114. LANGUAGE

  115. None
  116. @hschwentner Fach- sprache Domain Expert Developer

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

    schweigen.«
  118. None
  119. None
  120. @hschwentner Technische Sprache

  121. @hschwentner Auf den Feature Branch pushen? Fahr‘ den Container hoch!

    Ich baue dafür ein Interface
  122. X Class Database Server Client O/R-Mapping Inheritance A B Method

    Interface Linux Windows Eclipse Visual Studio
  123. None
  124. @hschwentner Domain Language

  125. @hschwentner Fachsprache

  126. @hschwentner Container Containernummer 4300 Kran Twistlock Frachtbrief

  127. @hschwentner

  128. None
  129. @hschwentner Fachbegriff Fachbegriff

  130. @hschwentner Technik Technik

  131. Ubiquitous Language

  132. Jubikjutuss Lengwitsch

  133. Allgegenwärtige Sprache

  134. Ubiquitäre Sprache

  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
  136. Peilplan

  137. Peilplan

  138. Peilplan

  139. Peil- plan

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

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

  142. “There are only two hard things in Computer Science: cache

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

    invalidaNon, naming things, and off-by-one errors.” Phil Karlton
  144. SMALL

  145. None
  146. None
  147. public class Silhouette { //... }

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

  150. None
  151. public class Silhouette { public void verschiebeUm(Laenge l) //... public

    void dreheUm(Winkel w) //... }
  152. Erich Gamma “Program to an interface, not to an implementation”

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

  154. WARNING SETTERS CAUSE MODEL ANEMIA

  155. VERSCHIEBT & DREHT 8 SCHIFFS- SILHOUETTE UND FINDET ROUTE NAUTIKER

    <<Entity>> Silhouette verschiebe() drehe()
  156. BIG

  157. ?

  158. ?

  159. ?

  160. None
  161. None
  162. None
  163. None
  164. @hschwentner “Whoever uses a canonical model has lost control over

    his life.” – Karl Lagerfeld
  165. @hschwentner »Wer ein kanonisches Domänenmodell einsetzt, hat die Kontrolle über

    sein Leben verloren« – Karl Lagerfeld
  166. None
  167. None
  168. None
  169. None
  170. None
  171. None
  172. None
  173. Bounded Context

  174. None
  175. Bewegung Kosmetik Gefühle

  176. 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
  177. None
  178. None
  179. None
  180. @hschwentner Do I get a car for this?

  181. None
  182. None
  183. 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
  184. CUSTOMER SIGNS CONTRACT 3 RISK MANAGER CONTRACT VOTES 7 <<Entity>>

    LeasingContract sign() vote()
  185. <<EnWty>> LeasingContract sign() vote()

  186. <<Entity>> LeasingContract sign() vote() extend() terminate() sell_to_refinance()

  187. @hschwentner The One Big Model

  188. None
  189. None
  190. @hschwentner Reality: Not one big model But several mixed models

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

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

  193. None
  194. 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
  195. <<EnWty>> LeasingContract sign() vote() ✘

  196. <<Entity>> LeasingContract sign() <<Entity>> LeasingContract vote()

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

  198. <<Entity>> LeasingContract sign() <<EnWty>> LeasingContract vote()

  199. <<Entity>> LeasingContract sign() <<Entity>> LeasingContract vote() SALES RISK MANAGEMENT

  200. @hschwentner Ubiquitous Language <=> Bounded Context

  201. Ludwig Wittgenstein »Die Grenzen meiner Sprache bedeuten die Grenzen meiner

    Welt«
  202. TIEFEN- MESSUNG PEIL- SCHIFF TIEFEN- ZAHL MARKIER- UNG PEIL- PLAN

    TIEFEN- ZAHL MANÖVERPLANUNG
  203. TIEFENZAHL TIEFE AN EINEM BESTIMMTEN ORT UNTER BERÜCKSICHTIGUNG VON EBBE

    UND FLUT TIEFENZAHL PER ECHOLOT GEMESSENE TIEFE BEI NORMALNULL MANÖVER- PLANUNG TIEFENMESSUNG
  204. @hschwentner Strategic Design Ubiquitous Language Tactical Design

  205. None
  206. None
  207. @hschwentner Collaborative Modeling

  208. None
  209. None
  210. 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
  211. CHAOS

  212. http://www.domainstorytelling.org

  213. 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
  214. 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
  215. None
  216. => Next slide deck

  217. @hschwentner Tactical Design

  218. None
  219. Entity

  220. AKA: Business Object

  221. None
  222. None
  223. @hschwentner Identity

  224. None
  225. None
  226. Foto: Th.omas G.Graf/Wikipedia oto: H. Schwentner

  227. Grafik: Pixabay

  228. Foto: Bernd Schwabe in Hannover/Wikipedia

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

  230. None
  231. Versicherungspolice Urlaubsantrag Baumaßnahme Kaufvertrag Fahrauftrag

  232. Value Object

  233. Foto: Public Domain/Pixabay

  234. Grafik: Public Domain/Pixabay

  235. Foto: A. Markiewicz

  236. None
  237. None
  238. @hschwentner Value: *No identity *immutable

  239. Beispiel: Tiefenzahl

  240. Postleitzahl GPS-Koordinate IBAN Containernummer IATA-Code

  241. Domain Event

  242. Domain Event

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

  244. @hschwentner WAM

  245. None
  246. None
  247. Entwurfsmetaphern

  248. Foto: Dallas Museum of Art/Wikipedia

  249. Foto: Christoph Michels/Wikipedia

  250. Material

  251. Foto: MrX/Wikipedia

  252. Foto: Silsor/Wikipedia

  253. Werkzeug

  254. Foto: Wolfgagn Lonien/Wikipedia

  255. Automat

  256. @hschwentner Material == Entity

  257. @hschwentner Material == passiv

  258. Foto: Christoph Michels/Wikipedia

  259. Foto: MrX/Wikipedia

  260. @hschwentner == aktiv

  261. None
  262. None
  263. Foto: Svdmolen/Wikipedia

  264. None
  265. @hschwentner Strategic Design

  266. None
  267. None
  268. None
  269. None
  270. None
  271. None
  272. None
  273. None
  274. Team Kopf Team Schwanz Team Rumpf Team Beine

  275. Team Emma Team Berta Team Erna Team Lisl

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

  277. Team Emma Team Berta Team Erna Team Lisl

  278. Team Emma Team Berta Team Erna Team Lisl

  279. None
  280. None
  281. TIDE- VORHER- SAGE MANÖVER- PLANUNG TIEFEN- MESSUNG

  282. None
  283. None
  284. “OrganizaNons which design systems are constrained to produce designs which

    are copies of the communicaNon structures of these organizaNons.” Melvin Conway
  285. “The organization of the software and the organization of the

    software team will be congruent.” Eric Raymond
  286. “If you have four groups working on a compiler, you'll

    get a 4-pass compiler.” Eric Raymond
  287. None
  288. None
  289. Micro- service A UI EnWWes Value Objects Services Micro- service

    B UI Entities Value Objects Services Micro- service C UI Entities Value Objects Services
  290. Micro- service A PräsentaWons- Schicht Fachdomänen- Schicht Infrastruktur- Schicht ApplikaWons-

    Schicht Micro- service B Direkter Zugriff Auf die DB Micro- service C
  291. Team Emma Team Berta Team Erna Team Lisl

  292. Team Emma Team Berta Team Erna Team Lisl

  293. Team Emma Team Berta Team Erna Team Lisl

  294. None
  295. None
  296. None
  297. Simon Brown

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

    Of Mud
  299. None
  300. None
  301. @hschwentner What now?

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

  303. None
  304. @hschwentner LeasingNinja.io

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

  306. @hschwentner Foto: Henning Schwentner

  307. @hschwentner Consulting

  308. @hschwentner Literature

  309. @hschwentner speakerdeck.com/hschwentner

  310. Foto: H. Schwentner

  311. Foto: H. Schwentner

  312. Foto: Amazon

  313. None
  314. None
  315. 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
  316. None
  317. None
  318. None
  319. None
  320. None
  321. None
  322. None
  323. Henning Schwentner @hschwentner hs@wps.de DDD DDD Slides: speakerdeck.com/hschwentner Book: leanpub.com/domainstorytelling