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

Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledNicola Costantino
 
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 ModelsAlexander van Trijffel
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignNaeem Sarfraz
 
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 Slidesthinkddd
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#Pascal Laurin
 
Introducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashIntroducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashSteven Smith
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignYoung-Ho Cho
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven developmentDmitry Geyzersky
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven DesignAndriy Buday
 
Domain-driven design - eine Einführung
Domain-driven design - eine EinführungDomain-driven design - eine Einführung
Domain-driven design - eine Einführungdie.agilen GmbH
 
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps Eason Kuo
 
Designing APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignDesigning APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignLaunchAny
 
Introduction to Domain Driven Design
Introduction to Domain Driven DesignIntroduction to Domain Driven Design
Introduction to Domain Driven DesignChristos Tsakostas
 

What's hot (20)

Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) Distilled
 
Domain Driven Design 101
Domain Driven Design 101Domain Driven Design 101
Domain Driven Design 101
 
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
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven Design
 
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
Domain driven designDomain driven design
Domain driven design
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#
 
Introducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashIntroducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemash
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven development
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Domain-driven design - eine Einführung
Domain-driven design - eine EinführungDomain-driven design - eine Einführung
Domain-driven design - eine Einführung
 
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
 
Designing APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignDesigning APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven Design
 
Introduction to Domain Driven Design
Introduction to Domain Driven DesignIntroduction to Domain Driven Design
Introduction to Domain Driven Design
 

Similar to Domain Driven Design Demonstrated

ZendCon 2011 UnCon Domain-Driven Design
ZendCon 2011 UnCon Domain-Driven DesignZendCon 2011 UnCon Domain-Driven Design
ZendCon 2011 UnCon Domain-Driven DesignBradley Holt
 
Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06jimbojsb
 
Artefacts - Bringing Clarity & Simplicity to Modelling
Artefacts - Bringing Clarity & Simplicity to ModellingArtefacts - Bringing Clarity & Simplicity to Modelling
Artefacts - Bringing Clarity & Simplicity to ModellingJorn Bettin
 
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"GlobalLogic Ukraine
 
Schibsted Spain - Day 1 - DDD Course
Schibsted Spain - Day 1 - DDD CourseSchibsted Spain - Day 1 - DDD Course
Schibsted Spain - Day 1 - DDD CourseKevin Mas Ruiz
 
Deployment is the new build
Deployment is the new buildDeployment is the new build
Deployment is the new buildAndrew Phillips
 
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 developedAlexander Makarov
 
Intro to Big Data and NoSQL
Intro to Big Data and NoSQLIntro to Big Data and NoSQL
Intro to Big Data and NoSQLDon Demcsak
 
Marco Mancuso - Data Context Interaction
Marco Mancuso - Data Context InteractionMarco Mancuso - Data Context Interaction
Marco Mancuso - Data Context InteractioncosenzaLab
 
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/2017Jonathan Wylliem
 
Data Modeling for NoSQL
Data Modeling for NoSQLData Modeling for NoSQL
Data Modeling for NoSQLTony Tam
 
The business case for contributing code
The business case for contributing codeThe business case for contributing code
The business case for contributing codeZivtech, LLC
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable CodeOrthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Codersebbe
 
Tooling for the JavaScript Era
Tooling for the JavaScript EraTooling for the JavaScript Era
Tooling for the JavaScript Eramartinlippert
 
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 ProjectsMike Long
 
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 WorkshopsCharles Edmunds
 
Project Tools in Web Development
Project Tools in Web DevelopmentProject Tools in Web Development
Project Tools in Web Developmentkmloomis
 
Domain Driven Design - garajco Education 2017
Domain Driven Design - garajco Education 2017Domain Driven Design - garajco Education 2017
Domain Driven Design - garajco Education 2017Can Pekdemir
 

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

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 

Recently uploaded (20)

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 

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