SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Up to Speed in
Domain Driven Design
Rick van der Arend
rvdarend@sogyo.nl
Agenda
 What is Domain Driven Design?
 An example of a domain model
 The building blocks of a domain model
 Refactoring towards deeper insight
 What has been learned since the book?
 Wrap-up
SOFTWARE INNOVATORS 2
SOFTWARE INNOVATORS 3
What is DDD?
“Putting the Domain Model to work”
DDD in one sentence
 Domain Driven Design is a style of software
development which focuses on removing translation
barriers between domain, development team and
design of working software using a ubiquitous
language supported by a well refined livingmodel.
Translation barriers
 Team talks to users and experts (if lucky)
 Write software that behaves as requested
 Names get translated back and forth
 Concepts diverge without anyone noticing
SOFTWARE INNOVATORS 5
?
Domain, Team and Model
Ubiquitous Language
Origins of the acronym DDD
 Eric Evans wrote the book that gave the
acronym DDD an impulse in 2005. Aptly named:
Domain Driven Design
“Tackling Complexity in the heart of software”
SOFTWARE INNOVATORS 8
An Example of a domain model
Domain model
SOFTWARE INNOVATORS 9
Parallel to the equator
Parallel to the earth axis
Orthogonal to the sun’s plain of movement Turning during the year
From Phased to Iterations
Analysis Design Build
Iteration Iteration
Test
Start with the Model, don’t stop
SOFTWARE INNOVATORS 11
Iteration Iteration
Domain Model
effort as part
of an iteration
SOFTWARE INNOVATORS 12
The building blocks of a
Model-Driven Design
Building blocks of MDD
Entities & Value objects
 Entities have an unmistakeable identity
 Value objects are indentified by.. their value
 a Person
 a Name
 an Address
 This depends on.. of course.. Context!
Factories , Repositories, Aggregates
 Factories create, Repositories store
 The unit of work they work on is an aggregate
 The thing they create of find and hand over will
be a reference to the aggregate root
Services
 Services encapsulate... well… Services
 They are not part of the core domain, but linked
 Objects change into other objects
Layers.. and more
 UI > domain model > Data access
SOFTWARE INNOVATORS 17
 Or.. domain model depends on nothing
SOFTWARE INNOVATORS 18
Refactoring towards deeper
insight
Refactoring towards deeper insight
 Use patterns when appropriate
 Make Unit Tests
 Better yet, do TDD
 Better yet, do BDD
 DRY and YAGNI
 But: all a bit technical
Making Implicit Concepts explicit
 Listen to Language
 Scrutinize Awkwardness
 Contemplate Contradictions
 Read the Book
 Try, Try again
 Model the less-than-obvious: constraints,
processes, commands, relations, etc.
SOFTWARE INNOVATORS 21
Strategic Design
Contents of chapter 4 as a model
Strategic Design: context rules!
 Be aware of different contexts
 Make a context map
 See how different bounded contexts relate
 Shared Kernel, Customer/Supplier development
teams, Conformist, Separate Ways, Partner
 Use an anti-corruption layer
Context Maps step-by-step
1. What models (or BBoM) do we know of? (draw
blob each and name it.)
2. Where does each apply? (Boundary in words.)
3. Where is information exchanged? (Connect)
4. What is the relationship?
(Upstream/downstream? Partner? Etc.)
SOFTWARE INNOVATORS 25
What has been learned since
the book?
Highlights that Evans learned
 Building blocks are overemphasized
 But domain events added as a new type of block
 General advice
▫ Don’t spread modeling too thin
▫ Focus on the core domain
▫ Clean, bounded context (CM steps available)
▫ Iterative process
▫ Don’t bore your domain experts
Domain events taken further
 Greg Young has been promoting the idea of
Command and Query separation
Techniques to explore
 Exploratory Modeling (xM)
 Model Driven Development environments
 Language Workbenches
 Naked Objects and other such platforms
SOFTWARE INNOVATORS 28
SOFTWARE INNOVATORS 29
Quick Wrap-up
Summary
 DDD highlights aspects of software design
 It focuses on the ‘core domain’ and uses a
ubiquitous language, based on a domain model
 The ubiquitous language brings out flaws
 A Domain Model is normally made up of certain
types of building blocks
 Thinks about context too: take control where and
whenever possible
Resources for Further study
 http://www.domaindrivendesign.org
 Numerous articles on http://www.infoq.com
 http://www.slideshare.net/devnology/unleash-
your-domain-with-greg-young
DDD in C#
 Jimmy Nilsson applied it to a C# context. His
book is has an informal tone, but a bit noisy.
Applying DDD and Patterns
With Examples in C# and .NET
SOFTWARE INNOVATORS 33
Contact
Rick van der Arend
rvdarend@sogyo.nl
030 - 220 22 16
Web: www.sogyo.nl
Blog: www.software–innovators.nl

Weitere ähnliche Inhalte

Was ist angesagt?

Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013Cyrille Martraire
 
Leveraging more then DDD Lite in the startup project
Leveraging more then DDD Lite in the startup projectLeveraging more then DDD Lite in the startup project
Leveraging more then DDD Lite in the startup projectThomas Jaskula
 
Introduction to C# - Week 0
Introduction to C# - Week 0Introduction to C# - Week 0
Introduction to C# - Week 0Jamshid Hashimi
 
Brownfield Domain Driven Design
Brownfield Domain Driven DesignBrownfield Domain Driven Design
Brownfield Domain Driven DesignNicolò Pignatelli
 
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
 
Baby steps to Domain-Driven Design
Baby steps to Domain-Driven DesignBaby steps to Domain-Driven Design
Baby steps to Domain-Driven DesignŽilvinas Kuusas
 
Ddd reboot (english version)
Ddd reboot (english version)Ddd reboot (english version)
Ddd reboot (english version)Thomas Pierrain
 
WordPress Coding Standards & WP Hooks
WordPress Coding Standards & WP HooksWordPress Coding Standards & WP Hooks
WordPress Coding Standards & WP HooksEunus Hosen
 
Detangling Your JavaScript
Detangling Your JavaScriptDetangling Your JavaScript
Detangling Your JavaScriptChris Powers
 

Was ist angesagt? (15)

Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013
 
Cucumber in Practice(en)
Cucumber in Practice(en)Cucumber in Practice(en)
Cucumber in Practice(en)
 
Cucumber_Training_ForQA
Cucumber_Training_ForQACucumber_Training_ForQA
Cucumber_Training_ForQA
 
Leveraging more then DDD Lite in the startup project
Leveraging more then DDD Lite in the startup projectLeveraging more then DDD Lite in the startup project
Leveraging more then DDD Lite in the startup project
 
Introduction to C# - Week 0
Introduction to C# - Week 0Introduction to C# - Week 0
Introduction to C# - Week 0
 
Backend roadmap
Backend roadmapBackend roadmap
Backend roadmap
 
Brownfield Domain Driven Design
Brownfield Domain Driven DesignBrownfield Domain Driven Design
Brownfield 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
 
Baby steps to Domain-Driven Design
Baby steps to Domain-Driven DesignBaby steps to Domain-Driven Design
Baby steps to Domain-Driven Design
 
Ddd reboot (english version)
Ddd reboot (english version)Ddd reboot (english version)
Ddd reboot (english version)
 
eXtreme Programming
eXtreme ProgrammingeXtreme Programming
eXtreme Programming
 
WordPress Coding Standards & WP Hooks
WordPress Coding Standards & WP HooksWordPress Coding Standards & WP Hooks
WordPress Coding Standards & WP Hooks
 
Perfect Code
Perfect CodePerfect Code
Perfect Code
 
What's DSL and what isn't
What's DSL and what isn'tWhat's DSL and what isn't
What's DSL and what isn't
 
Detangling Your JavaScript
Detangling Your JavaScriptDetangling Your JavaScript
Detangling Your JavaScript
 

Andere mochten auch

Scaling Out With Hadoop And HBase
Scaling Out With Hadoop And HBaseScaling Out With Hadoop And HBase
Scaling Out With Hadoop And HBaseAge Mooij
 
An Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using HaskellAn Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using HaskellMichel Rijnders
 
1 10 pages from inf-08_03_viaggi_in_italia_e_estero_2005
1 10 pages from inf-08_03_viaggi_in_italia_e_estero_20051 10 pages from inf-08_03_viaggi_in_italia_e_estero_2005
1 10 pages from inf-08_03_viaggi_in_italia_e_estero_2005guesta1caa70
 
Enterprise mobile strategy, Messaging the future
Enterprise mobile strategy, Messaging the futureEnterprise mobile strategy, Messaging the future
Enterprise mobile strategy, Messaging the futureShay Rosen (שי רוזן)
 
Wilson Altruism
Wilson AltruismWilson Altruism
Wilson Altruismclover66
 
TOSM 2011 -- Enterprise2.0
TOSM 2011 -- Enterprise2.0TOSM 2011 -- Enterprise2.0
TOSM 2011 -- Enterprise2.0CSP Scarl
 
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...Tawanda Kanhema
 
Founders Institute / Fall 2016 Mentor Deck
Founders Institute / Fall 2016 Mentor Deck Founders Institute / Fall 2016 Mentor Deck
Founders Institute / Fall 2016 Mentor Deck Anupam Kundu
 
How to be a successful agile product manager
How to be a successful agile product managerHow to be a successful agile product manager
How to be a successful agile product managerAnupam Kundu
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play frameworkCSP Scarl
 
Σχηματοπλανήτης
ΣχηματοπλανήτηςΣχηματοπλανήτης
ΣχηματοπλανήτηςGeorgios Fesakis
 
Tripadvisor- PPT
Tripadvisor- PPTTripadvisor- PPT
Tripadvisor- PPTElisabeth
 
Csp@scuola2011 seminariointro perotti
Csp@scuola2011 seminariointro perottiCsp@scuola2011 seminariointro perotti
Csp@scuola2011 seminariointro perottiCSP Scarl
 

Andere mochten auch (20)

Scaling Out With Hadoop And HBase
Scaling Out With Hadoop And HBaseScaling Out With Hadoop And HBase
Scaling Out With Hadoop And HBase
 
An Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using HaskellAn Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using Haskell
 
1 10 pages from inf-08_03_viaggi_in_italia_e_estero_2005
1 10 pages from inf-08_03_viaggi_in_italia_e_estero_20051 10 pages from inf-08_03_viaggi_in_italia_e_estero_2005
1 10 pages from inf-08_03_viaggi_in_italia_e_estero_2005
 
Enterprise mobile strategy, Messaging the future
Enterprise mobile strategy, Messaging the futureEnterprise mobile strategy, Messaging the future
Enterprise mobile strategy, Messaging the future
 
Horse trail1
Horse trail1Horse trail1
Horse trail1
 
Wilson Altruism
Wilson AltruismWilson Altruism
Wilson Altruism
 
TOSM 2011 -- Enterprise2.0
TOSM 2011 -- Enterprise2.0TOSM 2011 -- Enterprise2.0
TOSM 2011 -- Enterprise2.0
 
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
 
Dom 20160427 extra
Dom 20160427 extraDom 20160427 extra
Dom 20160427 extra
 
Founders Institute / Fall 2016 Mentor Deck
Founders Institute / Fall 2016 Mentor Deck Founders Institute / Fall 2016 Mentor Deck
Founders Institute / Fall 2016 Mentor Deck
 
Breve repaso de Historia Contemporánea
Breve repaso de Historia Contemporánea Breve repaso de Historia Contemporánea
Breve repaso de Historia Contemporánea
 
How to be a successful agile product manager
How to be a successful agile product managerHow to be a successful agile product manager
How to be a successful agile product manager
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play framework
 
Sandro del petre
Sandro del petreSandro del petre
Sandro del petre
 
Σχηματοπλανήτης
ΣχηματοπλανήτηςΣχηματοπλανήτης
Σχηματοπλανήτης
 
Hp
HpHp
Hp
 
ubd
ubdubd
ubd
 
Tripadvisor- PPT
Tripadvisor- PPTTripadvisor- PPT
Tripadvisor- PPT
 
Requesting Informational Interviews & Meetings
Requesting Informational Interviews & MeetingsRequesting Informational Interviews & Meetings
Requesting Informational Interviews & Meetings
 
Csp@scuola2011 seminariointro perotti
Csp@scuola2011 seminariointro perottiCsp@scuola2011 seminariointro perotti
Csp@scuola2011 seminariointro perotti
 

Ähnlich wie Domain Modeling Fundamentals in DDD

Importance Of Being Driven
Importance Of Being DrivenImportance Of Being Driven
Importance Of Being DrivenAntonio Terreno
 
Domain Driven Design and Model Driven Software Development
Domain Driven Design and Model Driven Software DevelopmentDomain Driven Design and Model Driven Software Development
Domain Driven Design and Model Driven Software DevelopmentBahram Maravandi
 
Introduction to Domain-Driven Design
Introduction to Domain-Driven DesignIntroduction to Domain-Driven Design
Introduction to Domain-Driven DesignR-P-Azevedo
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignLalit Kale
 
Code & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven DesignCode & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven DesignFrank Levering
 
Finding balance of DDD while your application grows
Finding balance of DDD while your application growsFinding balance of DDD while your application grows
Finding balance of DDD while your application growsCarolina Karklis
 
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 SDLCAbdul Karim
 
Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014Marco Parenzan
 
Domain Driven Design - Building Blocks
Domain Driven Design - Building BlocksDomain Driven Design - Building Blocks
Domain Driven Design - Building BlocksMark Windholtz
 
Envisioning the Future of Language Workbenches
Envisioning the Future of Language WorkbenchesEnvisioning the Future of Language Workbenches
Envisioning the Future of Language WorkbenchesMarkus Voelter
 
DSL, the absolute weapon for the development
DSL, the absolute weapon for the developmentDSL, the absolute weapon for the development
DSL, the absolute weapon for the developmentESUG
 
Dino Esposito. Polyglot Persistence: From Architecture to Solutions
Dino Esposito. Polyglot Persistence: From Architecture to SolutionsDino Esposito. Polyglot Persistence: From Architecture to Solutions
Dino Esposito. Polyglot Persistence: From Architecture to SolutionsCodeFest
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship ChecklistRyan Polk
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven DesignBradley Holt
 
Build your own Language - Why and How?
Build your own Language - Why and How?Build your own Language - Why and How?
Build your own Language - Why and How?Markus Voelter
 

Ähnlich wie Domain Modeling Fundamentals in DDD (20)

DDD In Agile
DDD In Agile   DDD In Agile
DDD In Agile
 
Importance Of Being Driven
Importance Of Being DrivenImportance Of Being Driven
Importance Of Being Driven
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design and Model Driven Software Development
Domain Driven Design and Model Driven Software DevelopmentDomain Driven Design and Model Driven Software Development
Domain Driven Design and Model Driven Software Development
 
DDD eXchange
DDD eXchangeDDD eXchange
DDD eXchange
 
Introduction to Domain-Driven Design
Introduction to Domain-Driven DesignIntroduction to Domain-Driven Design
Introduction to Domain-Driven Design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Code & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven DesignCode & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven Design
 
Finding balance of DDD while your application grows
Finding balance of DDD while your application growsFinding balance of DDD while your application grows
Finding balance of DDD while your application grows
 
SOAT Agile Day 2017 DDD
SOAT Agile Day 2017 DDDSOAT Agile Day 2017 DDD
SOAT Agile Day 2017 DDD
 
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
 
Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014
 
Domain Driven Design - Building Blocks
Domain Driven Design - Building BlocksDomain Driven Design - Building Blocks
Domain Driven Design - Building Blocks
 
Envisioning the Future of Language Workbenches
Envisioning the Future of Language WorkbenchesEnvisioning the Future of Language Workbenches
Envisioning the Future of Language Workbenches
 
DSL, the absolute weapon for the development
DSL, the absolute weapon for the developmentDSL, the absolute weapon for the development
DSL, the absolute weapon for the development
 
Dino Esposito. Polyglot Persistence: From Architecture to Solutions
Dino Esposito. Polyglot Persistence: From Architecture to SolutionsDino Esposito. Polyglot Persistence: From Architecture to Solutions
Dino Esposito. Polyglot Persistence: From Architecture to Solutions
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship Checklist
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Build your own Language - Why and How?
Build your own Language - Why and How?Build your own Language - Why and How?
Build your own Language - Why and How?
 

Kürzlich hochgeladen

Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
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
 
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
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
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
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
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
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
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
 
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
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
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
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 

Kürzlich hochgeladen (20)

Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
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
 
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
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
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
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
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
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
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
 
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
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
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
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 

Domain Modeling Fundamentals in DDD

  • 1. Up to Speed in Domain Driven Design Rick van der Arend rvdarend@sogyo.nl
  • 2. Agenda  What is Domain Driven Design?  An example of a domain model  The building blocks of a domain model  Refactoring towards deeper insight  What has been learned since the book?  Wrap-up SOFTWARE INNOVATORS 2
  • 3. SOFTWARE INNOVATORS 3 What is DDD? “Putting the Domain Model to work”
  • 4. DDD in one sentence  Domain Driven Design is a style of software development which focuses on removing translation barriers between domain, development team and design of working software using a ubiquitous language supported by a well refined livingmodel.
  • 5. Translation barriers  Team talks to users and experts (if lucky)  Write software that behaves as requested  Names get translated back and forth  Concepts diverge without anyone noticing SOFTWARE INNOVATORS 5 ?
  • 6. Domain, Team and Model Ubiquitous Language
  • 7. Origins of the acronym DDD  Eric Evans wrote the book that gave the acronym DDD an impulse in 2005. Aptly named: Domain Driven Design “Tackling Complexity in the heart of software”
  • 8. SOFTWARE INNOVATORS 8 An Example of a domain model
  • 9. Domain model SOFTWARE INNOVATORS 9 Parallel to the equator Parallel to the earth axis Orthogonal to the sun’s plain of movement Turning during the year
  • 10. From Phased to Iterations Analysis Design Build Iteration Iteration Test
  • 11. Start with the Model, don’t stop SOFTWARE INNOVATORS 11 Iteration Iteration Domain Model effort as part of an iteration
  • 12. SOFTWARE INNOVATORS 12 The building blocks of a Model-Driven Design
  • 14. Entities & Value objects  Entities have an unmistakeable identity  Value objects are indentified by.. their value  a Person  a Name  an Address  This depends on.. of course.. Context!
  • 15. Factories , Repositories, Aggregates  Factories create, Repositories store  The unit of work they work on is an aggregate  The thing they create of find and hand over will be a reference to the aggregate root
  • 16. Services  Services encapsulate... well… Services  They are not part of the core domain, but linked  Objects change into other objects
  • 17. Layers.. and more  UI > domain model > Data access SOFTWARE INNOVATORS 17  Or.. domain model depends on nothing
  • 18. SOFTWARE INNOVATORS 18 Refactoring towards deeper insight
  • 19. Refactoring towards deeper insight  Use patterns when appropriate  Make Unit Tests  Better yet, do TDD  Better yet, do BDD  DRY and YAGNI  But: all a bit technical
  • 20. Making Implicit Concepts explicit  Listen to Language  Scrutinize Awkwardness  Contemplate Contradictions  Read the Book  Try, Try again  Model the less-than-obvious: constraints, processes, commands, relations, etc.
  • 22. Contents of chapter 4 as a model
  • 23. Strategic Design: context rules!  Be aware of different contexts  Make a context map  See how different bounded contexts relate  Shared Kernel, Customer/Supplier development teams, Conformist, Separate Ways, Partner  Use an anti-corruption layer
  • 24. Context Maps step-by-step 1. What models (or BBoM) do we know of? (draw blob each and name it.) 2. Where does each apply? (Boundary in words.) 3. Where is information exchanged? (Connect) 4. What is the relationship? (Upstream/downstream? Partner? Etc.)
  • 25. SOFTWARE INNOVATORS 25 What has been learned since the book?
  • 26. Highlights that Evans learned  Building blocks are overemphasized  But domain events added as a new type of block  General advice ▫ Don’t spread modeling too thin ▫ Focus on the core domain ▫ Clean, bounded context (CM steps available) ▫ Iterative process ▫ Don’t bore your domain experts
  • 27. Domain events taken further  Greg Young has been promoting the idea of Command and Query separation
  • 28. Techniques to explore  Exploratory Modeling (xM)  Model Driven Development environments  Language Workbenches  Naked Objects and other such platforms SOFTWARE INNOVATORS 28
  • 30. Summary  DDD highlights aspects of software design  It focuses on the ‘core domain’ and uses a ubiquitous language, based on a domain model  The ubiquitous language brings out flaws  A Domain Model is normally made up of certain types of building blocks  Thinks about context too: take control where and whenever possible
  • 31. Resources for Further study  http://www.domaindrivendesign.org  Numerous articles on http://www.infoq.com  http://www.slideshare.net/devnology/unleash- your-domain-with-greg-young
  • 32. DDD in C#  Jimmy Nilsson applied it to a C# context. His book is has an informal tone, but a bit noisy. Applying DDD and Patterns With Examples in C# and .NET
  • 33. SOFTWARE INNOVATORS 33 Contact Rick van der Arend rvdarend@sogyo.nl 030 - 220 22 16 Web: www.sogyo.nl Blog: www.software–innovators.nl

Hinweis der Redaktion

  1. Command and Query Responsibility Segregation or CQRS according to Greg Young himself nowadays.