DDD Dirty Harry style

2,212 views
2,080 views

Published on

Sometimes you want to do Domain-Driven Design, but the bad guys are against you. Sometimes you need tobe the bad guy. This is Domain-Driven Design in a bloody brownfield scenario.

Published in: Technology
2 Comments
16 Likes
Statistics
Notes
  • Also slide #124 typo - "worls" should be "world" - nice paraphrasing though!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Thank you for the nice presentation - small typo in slide #89 - "expecting" has been spelled as "expectind".
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
2,212
On SlideShare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
38
Comments
2
Likes
16
Embeds 0
No embeds

No notes for slide

DDD Dirty Harry style

  1. 1. DirtyHarry’sStyle@ziobrandoDDDgiovedì 23 maggio 13
  2. 2. Goal #1Domain-DrivenDesign NOTstarting fromscratchgiovedì 23 maggio 13
  3. 3. Goal #2Arrive to DDD in anon prescriptivefashiongiovedì 23 maggio 13
  4. 4. Do you really need me?giovedì 23 maggio 13
  5. 5. CheckpointWhen to apply DDD?- Complex problem- High expectationsgiovedì 23 maggio 13
  6. 6. Anti-patternI want to do DDDI don’t know DDD well......so I apply DDD to asimple problemI don’t see any advantage...DDD is useless.giovedì 23 maggio 13
  7. 7. Wronggiovedì 23 maggio 13
  8. 8. We don’t learn in flatlandsgiovedì 23 maggio 13
  9. 9. giovedì 23 maggio 13
  10. 10. giovedì 23 maggio 13
  11. 11. That’s not our jobgiovedì 23 maggio 13
  12. 12. Call a Bomb Squadgiovedì 23 maggio 13
  13. 13. Our Safety Net✓Environments✓Build Scripts✓Test suite✓Private Database✓Fixtures✓ContinuousIntegration✓...giovedì 23 maggio 13
  14. 14. Toolsgiovedì 23 maggio 13
  15. 15. Professionalsgiovedì 23 maggio 13
  16. 16. Proper Toolsgiovedì 23 maggio 13
  17. 17. Even in the worst situationsgiovedì 23 maggio 13
  18. 18. giovedì 23 maggio 13
  19. 19. Could  you  please  pass  me  the  ...thing?The  s5ngy  one?Yes,  the  one  that  looks  like  ...  thatgiovedì 23 maggio 13
  20. 20. Toolsgiovedì 23 maggio 13
  21. 21. Precisiongiovedì 23 maggio 13
  22. 22. ContraceptiveAspiringiovedì 23 maggio 13
  23. 23. Languagegiovedì 23 maggio 13
  24. 24. Sietegiovedì 23 maggio 13
  25. 25. avanscopertaChecklistTools? --> Tool. (always the same)Precision? --> “When you are in state 12,the field MRKT_NFLD can be only B orK”Language? --> :-(giovedì 23 maggio 13
  26. 26. giovedì 23 maggio 13
  27. 27. Applicationgiovedì 23 maggio 13
  28. 28. ApplicationApplicationgiovedì 23 maggio 13
  29. 29. ApplicationApplicationApplicationgiovedì 23 maggio 13
  30. 30. ApplicationApplicationApplicationApplicationgiovedì 23 maggio 13
  31. 31. ApplicationApplicationApplicationApplicationApplicationgiovedì 23 maggio 13
  32. 32. ApplicationApplicationApplicationApplicationApplicationDatabasegiovedì 23 maggio 13
  33. 33. ApplicationApplicationApplicationApplicationApplicationDatabaseApplicationgiovedì 23 maggio 13
  34. 34. ApplicationApplicationApplicationApplicationApplicationDatabaseApplicationApplicationgiovedì 23 maggio 13
  35. 35. ApplicationApplicationApplicationApplicationApplicationDatabaseApplicationApplicationDatabasegiovedì 23 maggio 13
  36. 36. ApplicationApplicationApplicationApplicationApplicationDatabaseApplicationApplicationDatabasegiovedì 23 maggio 13
  37. 37. ApplicationApplicationApplicationApplicationApplicationDatabaseApplicationApplicationDatabaseData-based integrationgiovedì 23 maggio 13
  38. 38. avanscopertaData-­‐based  integra5on  checklistCan we tell...Which application is responsible for the datastructure?Which requirement influenced data definition?Is it still valid?It it valid in my context?Which applications use that data?Which consequences if we alter the structure?giovedì 23 maggio 13
  39. 39. Goal #1Arrive to DDD in abrownfieldscenariogiovedì 23 maggio 13
  40. 40. Solution #1Put the messaside and startform a greenfieldscenariogiovedì 23 maggio 13
  41. 41. Which problemdo we want tosolve?giovedì 23 maggio 13
  42. 42. Onegiovedì 23 maggio 13
  43. 43. Ourproblemgiovedì 23 maggio 13
  44. 44. 85%15%Our PROBLEM domainpast SOLUTIONSComplexitygiovedì 23 maggio 13
  45. 45. Our problemIl nostro contestoI nostri datiI dati dacondividereAltro contestoAltro contestoIl nostro databaseLanguage!!giovedì 23 maggio 13
  46. 46. TRESPASSERSWILL BE SHOTSURVIVORS WILLBE SHOT AGAINTHIS DATABASE ISMY DATABASEgiovedì 23 maggio 13
  47. 47. “Put  in  this  way,  it’s  simple...”Dev:giovedì 23 maggio 13
  48. 48. giovedì 23 maggio 13
  49. 49. DDD helps tosolve complexproblems,giovedì 23 maggio 13
  50. 50. DDD helps tosolve complexproblems,NOT to makesimple problemscomplicatedgiovedì 23 maggio 13
  51. 51. Zombiemanagementstrategiesgiovedì 23 maggio 13
  52. 52. A fence...giovedì 23 maggio 13
  53. 53. Learnt from the Romansgiovedì 23 maggio 13
  54. 54. giovedì 23 maggio 13
  55. 55. Romulus,  let  me  run  this  query,  please...giovedì 23 maggio 13
  56. 56. Romulus,  let  me  run  this  query,  please...Nope.giovedì 23 maggio 13
  57. 57. Romulus,  let  me  run  this  query,  please...Nope.Please,  Romulus  ...  it’s  a  read-­‐only  onegiovedì 23 maggio 13
  58. 58. giovedì 23 maggio 13
  59. 59. giovedì 23 maggio 13
  60. 60. BoundedContextgiovedì 23 maggio 13
  61. 61. Anti-Corruption LayergetContattiUnici(…):List<Contatto><<Service>>ContactServiceContactServicecontext boundaryAttributoAttributo<<Value Object>>ContattoAttributoAttributo<<Entity>>MyEntityOur Context ACLcontext boundaryComponenteOther Contextgiovedì 23 maggio 13
  62. 62. Anti-Corruption LayergetContattiUnici(…):List<Contatto><<Service>>ContactServiceContactServicecontext boundaryAttributoAttributo<<Value Object>>ContattoAttributoAttributo<<Entity>>MyEntityOur Context ACLcontext boundaryComponenteOther ContextModel as itshould begiovedì 23 maggio 13
  63. 63. Anti-Corruption LayergetContattiUnici(…):List<Contatto><<Service>>ContactServiceContactServicecontext boundaryAttributoAttributo<<Value Object>>ContattoAttributoAttributo<<Entity>>MyEntityOur Context ACLcontext boundaryComponenteOther ContextModel as itshould beThe legacycomponentwith all itstroublesgiovedì 23 maggio 13
  64. 64. Anti-Corruption LayergetContattiUnici(…):List<Contatto><<Service>>ContactServiceContactServicecontext boundaryAttributoAttributo<<Value Object>>ContattoAttributoAttributo<<Entity>>MyEntityOur Context ACLcontext boundaryComponenteOther ContextModel as itshould beThe legacycomponentwith all itstroublesHere we solve themess, by anypossible means.giovedì 23 maggio 13
  65. 65. ...and within ourBounded Context...giovedì 23 maggio 13
  66. 66. The ideal modelgiovedì 23 maggio 13
  67. 67. It’s not thatimportant...giovedì 23 maggio 13
  68. 68. Compliancegiovedì 23 maggio 13
  69. 69. There’s nomedalgiovedì 23 maggio 13
  70. 70. But maybe...http://www.youtube.com/watch?v=zDZFcDGpL4Ugiovedì 23 maggio 13
  71. 71. DDD as alearningprocessgiovedì 23 maggio 13
  72. 72. DDD patternssupportfrequentrewritingsgiovedì 23 maggio 13
  73. 73. DDD as anarchitecture thatsupportsevolutiongiovedì 23 maggio 13
  74. 74. ...better provide usthe right supporttool for designgiovedì 23 maggio 13
  75. 75. Whiteboardsgiovedì 23 maggio 13
  76. 76. CRC Cardsgiovedì 23 maggio 13
  77. 77. “Can  we  really  do  this?”P.O.:giovedì 23 maggio 13
  78. 78. giovedì 23 maggio 13
  79. 79. “We  need  to  put  a  valida9on  layer  to  avoid  incorrect  data  to  enter  into  the  system”Dev:giovedì 23 maggio 13
  80. 80. Really?giovedì 23 maggio 13
  81. 81. giovedì 23 maggio 13
  82. 82. Complexvalidation is asmellgiovedì 23 maggio 13
  83. 83. (almost) same dataDifferent BehavioursubmitregisterPaymentamountcustomerstate<<Entity>>Fatturaeditvalidateamountcustomer<<Entity>>InvoicePreviewgiovedì 23 maggio 13
  84. 84. Multiple modelsgiovedì 23 maggio 13
  85. 85. FrequentArchetypesgiovedì 23 maggio 13
  86. 86. 3 archetypes?Collaborative constructionTopic+ConversationFacebook, Basecamp, GithubExecutionState machines, CommandsTrackingLogging, Auditing, Datawarehouse, Eventsgiovedì 23 maggio 13
  87. 87. Haven’t put “why do all my DDDapplication looks the same” online, yetgiovedì 23 maggio 13
  88. 88. What does theDBA say?giovedì 23 maggio 13
  89. 89. “I  was  expec9nd  the  DB  structure  to  be  defined  once  for  all...”DBA:giovedì 23 maggio 13
  90. 90. ...giovedì 23 maggio 13
  91. 91. My first idea...giovedì 23 maggio 13
  92. 92. giovedì 23 maggio 13
  93. 93. She doesn’t exist inrealitygiovedì 23 maggio 13
  94. 94. Can a softwarecomponent designedbefore one applicationbe adequate to Nfollowing applications?giovedì 23 maggio 13
  95. 95. Obstaclesgiovedì 23 maggio 13
  96. 96. giovedì 23 maggio 13
  97. 97. You have towatch your backbefore interactingwith system Xgiovedì 23 maggio 13
  98. 98. There are somef***ing storedprocedures that runevery 10 minutesgiovedì 23 maggio 13
  99. 99. Nobody knowsexactly how dothey workgiovedì 23 maggio 13
  100. 100. Nobody knowsexactly how dothey workNobody everchanged them andcame back alivegiovedì 23 maggio 13
  101. 101. giovedì 23 maggio 13
  102. 102. Hrmpfgiovedì 23 maggio 13
  103. 103. Risk...giovedì 23 maggio 13
  104. 104. Dress  up  properly  before  going  out!Are  you  wearing  your  T-­‐shirt?Lock  the  door  when  you  get  out!Drive  slowly!giovedì 23 maggio 13
  105. 105. Anxietygiovedì 23 maggio 13
  106. 106. Cognitive loadHow manythings shouldI know, beforetouching thecode?giovedì 23 maggio 13
  107. 107. can we beignorant andproductive at thesame time?giovedì 23 maggio 13
  108. 108. Transaction management?Presentation Layer Application Layer Domain Layer InfrastructureLayerDDD99%ofexamplesgiovedì 23 maggio 13
  109. 109. Repository & SRPdelivery()pricecustomer<<Entity>>OrdercreateOrder(…)delivery(order_ID, …)<<Facade>>Application Facade+saveChanges()<<ORM>>Contextsave(Order, Context)findById(id, Context)<<Repository>>OrderRepositorycreateEmpty()<<factory>>OrderFactoryopens / closesusescreatesInfrastructure layerApplication LayerDomain LayerRiceve il contestotransazionaledallesternoIl Repository effettua leoperazioni di aggiunta e/orimozione dal contesto, ma èlapplication layer ad invocaresaveChanges()Crea ilcontesto e lopassa alrepositorygiovedì 23 maggio 13
  110. 110. Do notacceptcandiesfromstrangersgiovedì 23 maggio 13
  111. 111. ...why don’t weset up a shareddatabase table?...giovedì 23 maggio 13
  112. 112. giovedì 23 maggio 13
  113. 113. Ooops...giovedì 23 maggio 13
  114. 114. Do notacceptcandiesfromstrangersgiovedì 23 maggio 13
  115. 115. Do not acceptcandiesgiovedì 23 maggio 13
  116. 116. Motivationsgiovedì 23 maggio 13
  117. 117. Difficult childhoodnamesurnamephoneNumberPersonstudentCardNumberStudentsubjectstatusProfessorgiovedì 23 maggio 13
  118. 118. Show meyou’re aperson...giovedì 23 maggio 13
  119. 119. ...printyourself!giovedì 23 maggio 13
  120. 120. Difficult ChildhoodnamesurnamephoneNumberPersonstudentCardNumberStudentsubjectstatusProfessorgiovedì 23 maggio 13
  121. 121. The two things do not match...and it’s not an ORM problemgiovedì 23 maggio 13
  122. 122. Everyarchitectural rulethat starts with“every” is wronggiovedì 23 maggio 13
  123. 123. Consequencesgiovedì 23 maggio 13
  124. 124. You see,the worls isdivided into twocategories: the one in aBounded Context,andthe one who digs...giovedì 23 maggio 13
  125. 125. You ...dig!giovedì 23 maggio 13
  126. 126. Estimationsgiovedì 23 maggio 13
  127. 127. The tile layergiovedì 23 maggio 13
  128. 128. giovedì 23 maggio 13
  129. 129. giovedì 23 maggio 13
  130. 130. giovedì 23 maggio 13
  131. 131. Accounting it rightgiovedì 23 maggio 13
  132. 132. Accounting it rightImplementing amazingfunctionalities € 10.000giovedì 23 maggio 13
  133. 133. Accounting it rightImplementing amazingfunctionalities € 10.000Learning new techniquesand tools € 4.000giovedì 23 maggio 13
  134. 134. Accounting it rightImplementing amazingfunctionalities € 10.000Learning new techniquesand tools € 4.000Establish Safety Conditions € 12.000giovedì 23 maggio 13
  135. 135. Accounting it rightImplementing amazingfunctionalities € 10.000Learning new techniquesand tools € 4.000Establish Safety Conditions € 12.000Cleaning up somebody else’smess € 8.000giovedì 23 maggio 13
  136. 136. giovedì 23 maggio 13
  137. 137. That  will  cost  you  an  €xtra,  sir...giovedì 23 maggio 13
  138. 138. Valuegiovedì 23 maggio 13
  139. 139. ValueDon’t forget tocount the extravalue also.giovedì 23 maggio 13
  140. 140. Estimationsgiovedì 23 maggio 13
  141. 141. Estimations“Explorative” evolutionsgiovedì 23 maggio 13
  142. 142. Estimations“Explorative” evolutionsLegacy “Pandora’s box”giovedì 23 maggio 13
  143. 143. Ignorance based planning100%010%20%30%40%50%60%70%80%90%IgnoranceIgnoranceBreakthroughIgnorancegiovedì 23 maggio 13
  144. 144. Gold plating?giovedì 23 maggio 13
  145. 145. Product  OwnerTeamgiovedì 23 maggio 13
  146. 146. Product  OwnerTeamA  simple  requirementgiovedì 23 maggio 13
  147. 147. Product  OwnerTeamA  simple  requirement A  simple  requirementgiovedì 23 maggio 13
  148. 148. Product  OwnerTeamA  simple  requirement A  simple  requirementDone  as  DDD  prescribesgiovedì 23 maggio 13
  149. 149. Product  OwnerTeamA  simple  requirement A  simple  requirementDone  as  DDD  prescribesIn  a  clean  and  elegant  fashiongiovedì 23 maggio 13
  150. 150. Product  OwnerTeamA  simple  requirement A  simple  requirementDone  as  DDD  prescribesIn  a  clean  and  elegant  fashionSoongiovedì 23 maggio 13
  151. 151. Product  OwnerTeamA  simple  requirement A  simple  requirementDone  as  DDD  prescribesIn  a  clean  and  elegant  fashionSoon ....ooopsgiovedì 23 maggio 13
  152. 152. Yes, but how can Iunderstand if I amdoing DDD?giovedì 23 maggio 13
  153. 153. avanscopertaAre  we  really  doing  DDD?Result is better than expectationsNo fear in rewriting piecesWe’re having fungiovedì 23 maggio 13
  154. 154. Questions?giovedì 23 maggio 13
  155. 155. Questions?Really, you can...giovedì 23 maggio 13
  156. 156. Questions?giovedì 23 maggio 13
  157. 157. Questions?Really, you can...giovedì 23 maggio 13
  158. 158. Thank you@ziobrandoalberto.brandolini@avanscoperta.itgiovedì 23 maggio 13

×