SlideShare a Scribd company logo
1 of 12
Download to read offline
A Very Short Introduction to
Domain Driven Design (DDD)
Emre Sevinç
23-Sep-2020
http://tmdata.be
Domain Driven Design: The Message | 1
“First, we want to establish the idea that a computer
language is not just a way of getting a computer to
perform operations but rather that it is a novel formal
medium for expressing ideas about methodology. Thus,
programs must be written for people to read,and only
incidentally for machines to execute.”
Domain Driven Design: The Message | 2
“The purpose of abstraction is not to be vague, but
to create a new semantic level in which one can
be absolutely precise.”
Edsger W. Dijkstra (1930 - 2002)
Dutch computer scientist, software engineer, and pioneer
Domain Driven Design: The Reality
When building automation & software systems for your business, do you find yourself...
● trying to translate/map between your business terms and ICT & software jargon?
● looking at a piece of software code, hitting semantic barriers, and scratching your
head?
● wishing for an “utopia” where designers, engineers, and programmers could speak and
write in the “same language”, even down to the software code level, at least for a
part of the complex business domain?
Domain Driven Design: Language vs Language
Imagine a group of doctors, nurses, and software developers discussing a system related to the
tracking and recording of giving vaccine shots to the patients. Which software version would you prefer if
you were a doctor or a nurse?*
Possible Viewpoint Resulting Code
“Who cares? Just code it up!” user.setAction(actions.ShotTypes.TYPE_FLU);
user.setProperty(dose);
user.setOperator(nurse);
user.runAction();
“We give flu shots to patients.” patient.giveFluShot();
“Nurses administer flu vaccines to
patients in standard doses.”
vaccine = vaccines.standardAdultFluDose();
nurse.administerFluVaccine(patient, vaccine);
*
Adapted from Vernon (2013)
Domain Driven Design: What?
● Put domain experts and software developers on the same page
○ build software intensive systems that make perfect sense not only to the
software developers, but also to engineers and managers from the business.
● Teach the business more about itself.
○ Not every domain expert or C-level manager knows every part of the domain.
DDD lets everyone to contribute.
● Go beyond “tribal knowledge” locked in separate software systems: centralize the
knowledge, make it explicit, make it in the language of the business people and
engineers.
● Zero translations between the domain experts, software engineers, and the actual
software source code. Because the team develops a common, shared language, and
uses this not only in meetings, but also in actual software.
Domain Driven Design: Major Concepts & Patterns
● Domains
● Subdomains
● Bounded Contexts
● Ubiquitous Language
● Context Maps
● Architecture
● Entities
● Value Objects
● Services
● Domain Events
● Modules
● Aggregates
● Event Sourcing
● Repositories
Strategic Tactical
Programmers love to
talk about these.
Can you guess why?
Domain Driven Design: Why?
The major benefits of the Domain Driven Design style are:
● Communication: All members in a software development team can use the domain model
and the entities it defines to communicate business knowledge and requirements using
a common business domain language, without requiring software jargon.
● Extensible: The domain model is often modular and flexible, making it easy to update
and extend as conditions and requirements change.
● Testable: The domain model objects are loosely coupled and cohesive, allowing them to be
more easily tested. When done really well, even business stakeholders can easily write tests in
Behaviour Driven Development (BDD) style.
Domain Driven Design: Business Value
● The business gains a useful model of its domain: a refined, precise definition and
understanding of the business is developed.
● Domain experts contribute to the software design.
● A better User eXperience (UX) is gained.
● Enterprise architecture is better organized.
● Agile, iterative, continuous modeling is used.
Domain Driven Design: Yes or No?
● Consider DDD if you have a complex domain and you wish to improve communication and
understanding within your software development team, or where you must express the
design of an application in a common language that all stakeholders can easily
understand.
● DDD can also be an ideal approach if you have large and complex enterprise data scenarios
that are difficult to manage using other techniques.
● Be careful! In order to help maintain the model as a pure and helpful language construct, you
must typically implement a great deal of isolation and encapsulation within the domain model.
Consequently, a system based on DDD can come at a relatively high initial cost. While DDD
provides many technical benefits, such as maintainability, it should be applied only to
complex domains where the model and the linguistic processes provide clear benefits in
the communication of complex information, and in the formulation of a common understanding
of the domain.
Domain Driven Design
Thanks for Thinking Together!
Questions?
Domain Driven Design: Resources
● “Domain-Driven Design: Tackling Complexity in the Heart of Software”, 2003, Eric Evans
(Addison-Wesley)
● “Applying Domain-Driven Design and Patterns", 2006, Jimmy Nilsson (Addison-Wesley)
● “Domain Driven Design Quickly”, 2006, Floyd Marinescu, Abel Avram
● “Microsoft Application Architecture Guide, 2nd Edition”, 2009, Microsoft Patterns & Practices
Team
● “Implementing Domain-Driven Design”, 2013, Vaughn Vernon (Addison-Wesley)
● “A Philosophy of Software Design”, 2018, John Ousterhout (Yaknyam Press)

More Related Content

Similar to Domain Drive Design: A Very Short Introduction for Business People

Domain-Driven Design (Artur Trosin Product Stream)
Domain-Driven Design (Artur Trosin Product Stream)Domain-Driven Design (Artur Trosin Product Stream)
Domain-Driven Design (Artur Trosin Product Stream)IT Arena
 
assignment help experts
assignment help expertsassignment help experts
assignment help experts#essaywriting
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introductionwojtek_s
 
Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledNicola Costantino
 
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfDDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfEleonora Ciceri
 
Introduction to the cooperation principles in software development - Part I
Introduction to the cooperation principles in software development - Part IIntroduction to the cooperation principles in software development - Part I
Introduction to the cooperation principles in software development - Part IProf. Dr. Febe Angel Ciudad Ricardo
 
Copy of GDSC23 - Speaker Presentation Template.pptx_20230829_075717_0000.pptx
Copy of GDSC23 - Speaker Presentation Template.pptx_20230829_075717_0000.pptxCopy of GDSC23 - Speaker Presentation Template.pptx_20230829_075717_0000.pptx
Copy of GDSC23 - Speaker Presentation Template.pptx_20230829_075717_0000.pptxSipraMohanty11
 
Introduction to Domain driven design
Introduction to Domain driven designIntroduction to Domain driven design
Introduction to Domain driven designMuhammad Ali
 
Model Driven Architectures
Model Driven ArchitecturesModel Driven Architectures
Model Driven ArchitecturesLalit Kale
 
Domain Driven Design: Made Easy employing Systemic Approach
Domain Driven Design: Made Easy employing Systemic ApproachDomain Driven Design: Made Easy employing Systemic Approach
Domain Driven Design: Made Easy employing Systemic ApproachPanagiotis Papaioannou
 
Design guidelines for android developers
Design guidelines for android developersDesign guidelines for android developers
Design guidelines for android developersQandil Tariq
 
Domain Driven Design: Made Easy employing Systemic Approach
Domain Driven Design: Made Easy employing Systemic ApproachDomain Driven Design: Made Easy employing Systemic Approach
Domain Driven Design: Made Easy employing Systemic ApproachPanagiotis Papaioannou
 
Introduction to Domain-Driven Design
Introduction to Domain-Driven DesignIntroduction to Domain-Driven Design
Introduction to Domain-Driven DesignR-P-Azevedo
 
Idiomatic Domain Driven Design: implementing CQRS
Idiomatic Domain Driven Design: implementing CQRSIdiomatic Domain Driven Design: implementing CQRS
Idiomatic Domain Driven Design: implementing CQRSAndrea Saltarello
 
Low code application platforms
Low code application platformsLow code application platforms
Low code application platformsMatthew Weaver
 
The Concept Of Abstract Data Types
The Concept Of Abstract Data TypesThe Concept Of Abstract Data Types
The Concept Of Abstract Data TypesKaty Allen
 
Usability evaluation of Domain-Specific Languages
Usability evaluation of Domain-Specific LanguagesUsability evaluation of Domain-Specific Languages
Usability evaluation of Domain-Specific LanguagesAnkica Barisic
 
Cs8092 computer graphics and multimedia unit 5
Cs8092 computer graphics and multimedia unit 5Cs8092 computer graphics and multimedia unit 5
Cs8092 computer graphics and multimedia unit 5SIMONTHOMAS S
 
12 best programming languages for web & app development
12 best programming languages for web & app development12 best programming languages for web & app development
12 best programming languages for web & app developmentBiztech Consulting & Solutions
 

Similar to Domain Drive Design: A Very Short Introduction for Business People (20)

Domain-Driven Design (Artur Trosin Product Stream)
Domain-Driven Design (Artur Trosin Product Stream)Domain-Driven Design (Artur Trosin Product Stream)
Domain-Driven Design (Artur Trosin Product Stream)
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
assignment help experts
assignment help expertsassignment help experts
assignment help experts
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) Distilled
 
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfDDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
 
Introduction to the cooperation principles in software development - Part I
Introduction to the cooperation principles in software development - Part IIntroduction to the cooperation principles in software development - Part I
Introduction to the cooperation principles in software development - Part I
 
Copy of GDSC23 - Speaker Presentation Template.pptx_20230829_075717_0000.pptx
Copy of GDSC23 - Speaker Presentation Template.pptx_20230829_075717_0000.pptxCopy of GDSC23 - Speaker Presentation Template.pptx_20230829_075717_0000.pptx
Copy of GDSC23 - Speaker Presentation Template.pptx_20230829_075717_0000.pptx
 
Introduction to Domain driven design
Introduction to Domain driven designIntroduction to Domain driven design
Introduction to Domain driven design
 
Model Driven Architectures
Model Driven ArchitecturesModel Driven Architectures
Model Driven Architectures
 
Domain Driven Design: Made Easy employing Systemic Approach
Domain Driven Design: Made Easy employing Systemic ApproachDomain Driven Design: Made Easy employing Systemic Approach
Domain Driven Design: Made Easy employing Systemic Approach
 
Design guidelines for android developers
Design guidelines for android developersDesign guidelines for android developers
Design guidelines for android developers
 
Domain Driven Design: Made Easy employing Systemic Approach
Domain Driven Design: Made Easy employing Systemic ApproachDomain Driven Design: Made Easy employing Systemic Approach
Domain Driven Design: Made Easy employing Systemic Approach
 
Introduction to Domain-Driven Design
Introduction to Domain-Driven DesignIntroduction to Domain-Driven Design
Introduction to Domain-Driven Design
 
Idiomatic Domain Driven Design: implementing CQRS
Idiomatic Domain Driven Design: implementing CQRSIdiomatic Domain Driven Design: implementing CQRS
Idiomatic Domain Driven Design: implementing CQRS
 
Low code application platforms
Low code application platformsLow code application platforms
Low code application platforms
 
The Concept Of Abstract Data Types
The Concept Of Abstract Data TypesThe Concept Of Abstract Data Types
The Concept Of Abstract Data Types
 
Usability evaluation of Domain-Specific Languages
Usability evaluation of Domain-Specific LanguagesUsability evaluation of Domain-Specific Languages
Usability evaluation of Domain-Specific Languages
 
Cs8092 computer graphics and multimedia unit 5
Cs8092 computer graphics and multimedia unit 5Cs8092 computer graphics and multimedia unit 5
Cs8092 computer graphics and multimedia unit 5
 
12 best programming languages for web & app development
12 best programming languages for web & app development12 best programming languages for web & app development
12 best programming languages for web & app development
 

Recently uploaded

chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 

Recently uploaded (20)

chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 

Domain Drive Design: A Very Short Introduction for Business People

  • 1. A Very Short Introduction to Domain Driven Design (DDD) Emre Sevinç 23-Sep-2020 http://tmdata.be
  • 2. Domain Driven Design: The Message | 1 “First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read,and only incidentally for machines to execute.”
  • 3. Domain Driven Design: The Message | 2 “The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.” Edsger W. Dijkstra (1930 - 2002) Dutch computer scientist, software engineer, and pioneer
  • 4. Domain Driven Design: The Reality When building automation & software systems for your business, do you find yourself... ● trying to translate/map between your business terms and ICT & software jargon? ● looking at a piece of software code, hitting semantic barriers, and scratching your head? ● wishing for an “utopia” where designers, engineers, and programmers could speak and write in the “same language”, even down to the software code level, at least for a part of the complex business domain?
  • 5. Domain Driven Design: Language vs Language Imagine a group of doctors, nurses, and software developers discussing a system related to the tracking and recording of giving vaccine shots to the patients. Which software version would you prefer if you were a doctor or a nurse?* Possible Viewpoint Resulting Code “Who cares? Just code it up!” user.setAction(actions.ShotTypes.TYPE_FLU); user.setProperty(dose); user.setOperator(nurse); user.runAction(); “We give flu shots to patients.” patient.giveFluShot(); “Nurses administer flu vaccines to patients in standard doses.” vaccine = vaccines.standardAdultFluDose(); nurse.administerFluVaccine(patient, vaccine); * Adapted from Vernon (2013)
  • 6. Domain Driven Design: What? ● Put domain experts and software developers on the same page ○ build software intensive systems that make perfect sense not only to the software developers, but also to engineers and managers from the business. ● Teach the business more about itself. ○ Not every domain expert or C-level manager knows every part of the domain. DDD lets everyone to contribute. ● Go beyond “tribal knowledge” locked in separate software systems: centralize the knowledge, make it explicit, make it in the language of the business people and engineers. ● Zero translations between the domain experts, software engineers, and the actual software source code. Because the team develops a common, shared language, and uses this not only in meetings, but also in actual software.
  • 7. Domain Driven Design: Major Concepts & Patterns ● Domains ● Subdomains ● Bounded Contexts ● Ubiquitous Language ● Context Maps ● Architecture ● Entities ● Value Objects ● Services ● Domain Events ● Modules ● Aggregates ● Event Sourcing ● Repositories Strategic Tactical Programmers love to talk about these. Can you guess why?
  • 8. Domain Driven Design: Why? The major benefits of the Domain Driven Design style are: ● Communication: All members in a software development team can use the domain model and the entities it defines to communicate business knowledge and requirements using a common business domain language, without requiring software jargon. ● Extensible: The domain model is often modular and flexible, making it easy to update and extend as conditions and requirements change. ● Testable: The domain model objects are loosely coupled and cohesive, allowing them to be more easily tested. When done really well, even business stakeholders can easily write tests in Behaviour Driven Development (BDD) style.
  • 9. Domain Driven Design: Business Value ● The business gains a useful model of its domain: a refined, precise definition and understanding of the business is developed. ● Domain experts contribute to the software design. ● A better User eXperience (UX) is gained. ● Enterprise architecture is better organized. ● Agile, iterative, continuous modeling is used.
  • 10. Domain Driven Design: Yes or No? ● Consider DDD if you have a complex domain and you wish to improve communication and understanding within your software development team, or where you must express the design of an application in a common language that all stakeholders can easily understand. ● DDD can also be an ideal approach if you have large and complex enterprise data scenarios that are difficult to manage using other techniques. ● Be careful! In order to help maintain the model as a pure and helpful language construct, you must typically implement a great deal of isolation and encapsulation within the domain model. Consequently, a system based on DDD can come at a relatively high initial cost. While DDD provides many technical benefits, such as maintainability, it should be applied only to complex domains where the model and the linguistic processes provide clear benefits in the communication of complex information, and in the formulation of a common understanding of the domain.
  • 11. Domain Driven Design Thanks for Thinking Together! Questions?
  • 12. Domain Driven Design: Resources ● “Domain-Driven Design: Tackling Complexity in the Heart of Software”, 2003, Eric Evans (Addison-Wesley) ● “Applying Domain-Driven Design and Patterns", 2006, Jimmy Nilsson (Addison-Wesley) ● “Domain Driven Design Quickly”, 2006, Floyd Marinescu, Abel Avram ● “Microsoft Application Architecture Guide, 2nd Edition”, 2009, Microsoft Patterns & Practices Team ● “Implementing Domain-Driven Design”, 2013, Vaughn Vernon (Addison-Wesley) ● “A Philosophy of Software Design”, 2018, John Ousterhout (Yaknyam Press)