SlideShare a Scribd company logo
1 of 35
Domain Driven Design
   Demonstrated
      Alan Christensen
       @christensena




                 Christchurch Code Camp   Feb 18 2012

             1
What is a Domain?




        2
What is a Domain?


• “A sphere of knowledge, influence or
  activity”--Eric Evans




                      2
What is DDD?




     3
What is DDD?
• In order of importance:




                     3
What is DDD?
• In order of importance:
 • Design methodology




                     3
What is DDD?
• In order of importance:
 • Design methodology
 • Architectural style



                     3
What is DDD?
• In order of importance:
 • Design methodology
 • Architectural style
 • Set of software patterns


                    3
What is DDD?
• In order of importance:
 • Design methodology
 • Architectural style
 • Set of software patterns
• “Tackling Complexity in the Heart of
  Software”--DDD book tagline

                     3
Domain Modeling




       4
Domain Modeling
• Understand your domain




                   4
Domain Modeling
• Understand your domain
• Model it in the code to suit the purpose
  and context for which it was intended




                     4
Domain Modeling
• Understand your domain
• Model it in the code to suit the purpose
  and context for which it was intended
• Leave out details and concepts that don’t
  add value



                     4
Domain Modeling
• Understand your domain
• Model it in the code to suit the purpose
  and context for which it was intended
• Leave out details and concepts that don’t
  add value
• Keep refining “refactor to greater insight”
                      4
5
Ubiquitous Language




         6
Ubiquitous Language
• Naming is important!




                    6
Ubiquitous Language
• Naming is important!
• As is a shared understanding and consistent
  use of terms




                     6
Ubiquitous Language
• Naming is important!
• As is a shared understanding and consistent
  use of terms
• The code should use the same terms used
  in documents and discussion




                     6
Ubiquitous Language
• Naming is important!
• As is a shared understanding and consistent
  use of terms
• The code should use the same terms used
  in documents and discussion
• Both domain experts and developers
  contribute to the shared language

                     6
7
7
7
the Welsh reads "I am not in the office at the
moment. Send any work to be translated."
             8
Onion Architecture




        9
Entities




   10
Entities
• Have an identity




                     10
Entities
• Have an identity
• Identity may be determined by a natural or
  assigned key (e.g. Id)




                       10
Entities
• Have an identity
• Identity may be determined by a natural or
  assigned key (e.g. Id)
• Equals implementation to distinguish
  identity normally uses key



                       10
Entities
• Have an identity
• Identity may be determined by a natural or
  assigned key (e.g. Id)
• Equals implementation to distinguish
  identity normally uses key
• Mutable - can be changed
                       10
Value objects




      11
Value objects

• No identity. Can be mixed and matched




                    11
Value objects

• No identity. Can be mixed and matched
• Equals implemented as “all fields/properties
  match”




                     11
Value objects

• No identity. Can be mixed and matched
• Equals implemented as “all fields/properties
  match”
• Immutable - replace instead of change

                     11
Worked example

• What domain should we use?
 • Inventory?
 • Payroll?
 • Share trading?

                   12

More Related Content

What's hot

What's hot (20)

Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slides
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Domain Driven Design 101
Domain Driven Design 101Domain Driven Design 101
Domain Driven Design 101
 
Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) Distilled
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design Quickly
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and MicroservicesDomain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and Microservices
 
How to Implement Domain Driven Design in Real Life SDLC
How to Implement Domain Driven Design  in Real Life SDLCHow to Implement Domain Driven Design  in Real Life SDLC
How to Implement Domain Driven Design in Real Life SDLC
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Enterprise Software Architecture styles
Enterprise Software Architecture stylesEnterprise Software Architecture styles
Enterprise Software Architecture styles
 
DDD In Agile
DDD In Agile   DDD In Agile
DDD In Agile
 
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
 

Similar to Domain Driven Design Demonstrated

Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06
jimbojsb
 
Artefacts - Bringing Clarity & Simplicity to Modelling
Artefacts - Bringing Clarity & Simplicity to ModellingArtefacts - Bringing Clarity & Simplicity to Modelling
Artefacts - Bringing Clarity & Simplicity to Modelling
Jorn Bettin
 
Intro to Big Data and NoSQL
Intro to Big Data and NoSQLIntro to Big Data and NoSQL
Intro to Big Data and NoSQL
Don Demcsak
 
Marco Mancuso - Data Context Interaction
Marco Mancuso - Data Context InteractionMarco Mancuso - Data Context Interaction
Marco Mancuso - Data Context Interaction
cosenzaLab
 
The business case for contributing code
The business case for contributing codeThe business case for contributing code
The business case for contributing code
Zivtech, LLC
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable CodeOrthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
rsebbe
 
Tooling for the JavaScript Era
Tooling for the JavaScript EraTooling for the JavaScript Era
Tooling for the JavaScript Era
martinlippert
 
Project Tools in Web Development
Project Tools in Web DevelopmentProject Tools in Web Development
Project Tools in Web Development
kmloomis
 

Similar to Domain Driven Design Demonstrated (20)

ZendCon 2011 UnCon Domain-Driven Design
ZendCon 2011 UnCon Domain-Driven DesignZendCon 2011 UnCon Domain-Driven Design
ZendCon 2011 UnCon Domain-Driven Design
 
Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06
 
Artefacts - Bringing Clarity & Simplicity to Modelling
Artefacts - Bringing Clarity & Simplicity to ModellingArtefacts - Bringing Clarity & Simplicity to Modelling
Artefacts - Bringing Clarity & Simplicity to Modelling
 
Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"
 
Schibsted Spain - Day 1 - DDD Course
Schibsted Spain - Day 1 - DDD CourseSchibsted Spain - Day 1 - DDD Course
Schibsted Spain - Day 1 - DDD Course
 
Deployment is the new build
Deployment is the new buildDeployment is the new build
Deployment is the new build
 
Solr pattern
Solr patternSolr pattern
Solr pattern
 
Zend Di in ZF 2.0
Zend Di in ZF 2.0Zend Di in ZF 2.0
Zend Di in ZF 2.0
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developed
 
Intro to Big Data and NoSQL
Intro to Big Data and NoSQLIntro to Big Data and NoSQL
Intro to Big Data and NoSQL
 
Marco Mancuso - Data Context Interaction
Marco Mancuso - Data Context InteractionMarco Mancuso - Data Context Interaction
Marco Mancuso - Data Context Interaction
 
Domain Driven Design Ruby Ways - JURNAL 05/10/2017
Domain Driven Design Ruby Ways -  JURNAL 05/10/2017Domain Driven Design Ruby Ways -  JURNAL 05/10/2017
Domain Driven Design Ruby Ways - JURNAL 05/10/2017
 
Data Modeling for NoSQL
Data Modeling for NoSQLData Modeling for NoSQL
Data Modeling for NoSQL
 
The business case for contributing code
The business case for contributing codeThe business case for contributing code
The business case for contributing code
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable CodeOrthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
 
Tooling for the JavaScript Era
Tooling for the JavaScript EraTooling for the JavaScript Era
Tooling for the JavaScript Era
 
Cleaning Code - Tools and Techniques for Large Legacy Projects
Cleaning Code - Tools and Techniques for Large Legacy ProjectsCleaning Code - Tools and Techniques for Large Legacy Projects
Cleaning Code - Tools and Techniques for Large Legacy Projects
 
Website Architecture Presentation from Web Strategy Workshops
Website Architecture Presentation from Web Strategy WorkshopsWebsite Architecture Presentation from Web Strategy Workshops
Website Architecture Presentation from Web Strategy Workshops
 
Project Tools in Web Development
Project Tools in Web DevelopmentProject Tools in Web Development
Project Tools in Web Development
 
Domain Driven Design - garajco Education 2017
Domain Driven Design - garajco Education 2017Domain Driven Design - garajco Education 2017
Domain Driven Design - garajco Education 2017
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 

Domain Driven Design Demonstrated

  • 1. Domain Driven Design Demonstrated Alan Christensen @christensena Christchurch Code Camp Feb 18 2012 1
  • 2. What is a Domain? 2
  • 3. What is a Domain? • “A sphere of knowledge, influence or activity”--Eric Evans 2
  • 5. What is DDD? • In order of importance: 3
  • 6. What is DDD? • In order of importance: • Design methodology 3
  • 7. What is DDD? • In order of importance: • Design methodology • Architectural style 3
  • 8. What is DDD? • In order of importance: • Design methodology • Architectural style • Set of software patterns 3
  • 9. What is DDD? • In order of importance: • Design methodology • Architectural style • Set of software patterns • “Tackling Complexity in the Heart of Software”--DDD book tagline 3
  • 12. Domain Modeling • Understand your domain • Model it in the code to suit the purpose and context for which it was intended 4
  • 13. Domain Modeling • Understand your domain • Model it in the code to suit the purpose and context for which it was intended • Leave out details and concepts that don’t add value 4
  • 14. Domain Modeling • Understand your domain • Model it in the code to suit the purpose and context for which it was intended • Leave out details and concepts that don’t add value • Keep refining “refactor to greater insight” 4
  • 15. 5
  • 18. Ubiquitous Language • Naming is important! • As is a shared understanding and consistent use of terms 6
  • 19. Ubiquitous Language • Naming is important! • As is a shared understanding and consistent use of terms • The code should use the same terms used in documents and discussion 6
  • 20. Ubiquitous Language • Naming is important! • As is a shared understanding and consistent use of terms • The code should use the same terms used in documents and discussion • Both domain experts and developers contribute to the shared language 6
  • 21. 7
  • 22. 7
  • 23. 7
  • 24. the Welsh reads "I am not in the office at the moment. Send any work to be translated." 8
  • 26. Entities 10
  • 27. Entities • Have an identity 10
  • 28. Entities • Have an identity • Identity may be determined by a natural or assigned key (e.g. Id) 10
  • 29. Entities • Have an identity • Identity may be determined by a natural or assigned key (e.g. Id) • Equals implementation to distinguish identity normally uses key 10
  • 30. Entities • Have an identity • Identity may be determined by a natural or assigned key (e.g. Id) • Equals implementation to distinguish identity normally uses key • Mutable - can be changed 10
  • 32. Value objects • No identity. Can be mixed and matched 11
  • 33. Value objects • No identity. Can be mixed and matched • Equals implemented as “all fields/properties match” 11
  • 34. Value objects • No identity. Can be mixed and matched • Equals implemented as “all fields/properties match” • Immutable - replace instead of change 11
  • 35. Worked example • What domain should we use? • Inventory? • Payroll? • Share trading? 12
  • 36. 13
  • 37. Code demo #1 • Model Driven Design • Domain Methodology • Entities and Value Objects • Invariants 14
  • 39. Invariants • Invariants ensure consistency in the domain model 15
  • 40. Invariants • Invariants ensure consistency in the domain model • They allow us to code with confidence that invalid/unnatural states are not possible 15
  • 41. Invariants • Invariants ensure consistency in the domain model • They allow us to code with confidence that invalid/unnatural states are not possible • They enforce domain rules and prevent logical fallacies 15
  • 42. Invariants • Examples • Private setters • Required constructor/factory method parameters • Exceptions for invalid operations or invalid arguments to methods 16
  • 44. Validation? • Validation is not really a domain concept. Invariants are the richer idea. 17
  • 45. Validation? • Validation is not really a domain concept. Invariants are the richer idea. • Validation should be done outside the domain to prevent invariants from ever occurring (exceptions are for exceptions) 17
  • 47. Persistence Ignorance • Persistence is a technical concern. Not part of the domain. 18
  • 48. Persistence Ignorance • Persistence is a technical concern. Not part of the domain. • Fortunately good ORM’s support Persistence Ignorance out of the box 18
  • 49. Persistence Ignorance • Persistence is a technical concern. Not part of the domain. • Fortunately good ORM’s support Persistence Ignorance out of the box • Transactions can be packaged in a “Unit of Work” concept 18
  • 51. Repositories • Semantically just “collections” with enhanced “find” functionality 19
  • 52. Repositories • Semantically just “collections” with enhanced “find” functionality • In reality they will be the “gateway” to the persistence store 19
  • 53. Repositories • Semantically just “collections” with enhanced “find” functionality • In reality they will be the “gateway” to the persistence store • Repositories are the main mechanism for Persistence Ignorance 19
  • 55. Aggregates • Some entities only make sense in the context of a parent entity or hierarchy 20
  • 56. Aggregates • Some entities only make sense in the context of a parent entity or hierarchy • Nominate specific entities as Aggregate Roots 20
  • 57. Aggregates • Some entities only make sense in the context of a parent entity or hierarchy • Nominate specific entities as Aggregate Roots • All other entities are only accessible by traversing from their aggregate roots 20
  • 58. Aggregates • Some entities only make sense in the context of a parent entity or hierarchy • Nominate specific entities as Aggregate Roots • All other entities are only accessible by traversing from their aggregate roots • Inter-aggregate relationships via queries/ lookups on repositories 20
  • 59. 21
  • 60. Code demo #2 • Repositories • Unit of Work • Fluent NHibernate AutoMapping • Session per Request 22
  • 61. 23
  • 62. Domain Services • Not general-purpose “services” (overloaded term) • Repository/UoW aware (entities are not) • Able to coordinate business processes • Most logic should still be inside entity and value objects (Domain Model) 24
  • 63. UI and Data Binding 25
  • 64. UI and Data Binding • Don’t try to data bind to anything in your domain model! 25
  • 65. UI and Data Binding • Don’t try to data bind to anything in your domain model! • Bind to “view models”, tailored to your view (MVC/MVP/MVVM) 25
  • 66. UI and Data Binding • Don’t try to data bind to anything in your domain model! • Bind to “view models”, tailored to your view (MVC/MVP/MVVM) • Read operations: Use tools like AutoMapper to map to view models 25
  • 67. UI and Data Binding • Don’t try to data bind to anything in your domain model! • Bind to “view models”, tailored to your view (MVC/MVP/MVVM) • Read operations: Use tools like AutoMapper to map to view models • Write operations: Intention/behaviour oriented. Command processor pattern works well 25
  • 69. Transports/Hydration • ORMs such as NHibernate create proxies, bypass invariants for re-hydration 26
  • 70. Transports/Hydration • ORMs such as NHibernate create proxies, bypass invariants for re-hydration • Invariants mean .NET serialisation needs to be via DTO’s. 26
  • 71. Transports/Hydration • ORMs such as NHibernate create proxies, bypass invariants for re-hydration • Invariants mean .NET serialisation needs to be via DTO’s. • DTO’s are best not as domain model clones! As with UI viewmodels, tailor for purpose. 26
  • 72. Transports/Hydration • ORMs such as NHibernate create proxies, bypass invariants for re-hydration • Invariants mean .NET serialisation needs to be via DTO’s. • DTO’s are best not as domain model clones! As with UI viewmodels, tailor for purpose. 26
  • 74. NoSQL? • DDD style aggregates can be a natural fit for document oriented databases 27
  • 75. NoSQL? • DDD style aggregates can be a natural fit for document oriented databases • No need for mapping! 27
  • 76. NoSQL? • DDD style aggregates can be a natural fit for document oriented databases • No need for mapping! • Use of event sourcing can feed same information into reporting database(s) 27
  • 77. NoSQL? • DDD style aggregates can be a natural fit for document oriented databases • No need for mapping! • Use of event sourcing can feed same information into reporting database(s) • If using relational as dual use e.g. reporting, consider the change resistance 27
  • 79. Fashions & Developments • CQRS 28
  • 80. Fashions & Developments • CQRS • Micro-ORMs 28
  • 81. Fashions & Developments • CQRS • Micro-ORMs • Repository pattern? 28
  • 82. Summary • Modeling Driven • This means designing and writing code that • expresses the domain logic • follows/enforces the domain rules • uses the domain language • databases, UI, infrastructure, etc are outside the domain 29
  • 83. 30
  • 84. Should I use DDD? • DDD over engineered for simple CRUD or mostly data oriented applications • Best suited to complex, behaviourally oriented applications • However, many of the ideas and patterns are useful in all sorts of projects 31
  • 85. Other DDD concepts • Factories • Bounded Contexts • Anti-corruption Layers • Domain Events 32
  • 86. Umpire Scorecard Over Over Player Player Delivery Run No-Ball Team Wide Innings Out Dismissal Crease Bowling Spell Boundary Country LBW Scorecard Bat-Pad Match Stumping Fall-of-Wickets Light Weather 33
  • 87. Umpire Scorecard Over Over Player Player Delivery Run No-Ball Team Wide Innings Out Dismissal Crease Bowling Spell Boundary Country LBW Scorecard Bat-Pad Match Stumping Fall-of-Wickets Light Weather 33
  • 88. References • DDD Quickly book on InfoQ bit.ly/dddquickly • Think DDD (Jak Charlton) bit.ly/thinkdddbook • Onion Architecture bit.ly/onionarch • Martin Fowler on Aggregates and NoSQL bit.ly/aggregates-nosql • My example code: github.com/christensena/DDDIntro 34
  • 89. Alan Christensen @christensena 35

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n