Download - Code & Cannoli - Domain Driven Design
![Page 1: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/1.jpg)
Introduction to Domain Driven Design
![Page 2: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/2.jpg)
Frank Levering• PHP Developer • DevMob
![Page 3: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/3.jpg)
Quality software• Writing tests • Using design patterns • Manual testing • SOLID
![Page 4: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/4.jpg)
Quality software doesn’t give an insurance for a quality
software model
![Page 5: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/5.jpg)
Code example
Date - Name
![Page 6: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/6.jpg)
It saves a customer no matter what, awesome right?
![Page 7: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/7.jpg)
This model is suffering from Anemia
![Page 8: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/8.jpg)
We have no idea under what business situations this
method is used
![Page 9: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/9.jpg)
And it even gets worse
![Page 10: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/10.jpg)
Code example
Date - Name
![Page 11: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/11.jpg)
Can we really test this?
![Page 12: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/12.jpg)
DDD helps you creating a more high-quality software
model
![Page 13: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/13.jpg)
It helps you create software that makes sense to the
business
![Page 14: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/14.jpg)
You would be making software that is as close as possible to what the
business leaders and experts would create if they were the developers
![Page 15: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/15.jpg)
Disclaimer• A domain is not DNS or
anything internet related • Domain is the area your
business relies
![Page 16: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/16.jpg)
So how does DDD work?• Strategic design • Tactical design
![Page 17: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/17.jpg)
We will mostly be talking about strategic design today
![Page 18: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/18.jpg)
Key concepts of strategic design• Domain experts • Ubiquitous language • Core Domains, Subdomains
and Domain Models • Bounded Contexts
![Page 19: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/19.jpg)
Not doing any strategic design results in doing DDD-
Lite
![Page 20: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/20.jpg)
Domain experts
![Page 21: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/21.jpg)
Bringing domain experts and developers to the same playing field which produces software
that makes sense to the business
![Page 22: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/22.jpg)
Introducing Ubiquitous language
![Page 23: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/23.jpg)
It’s not the language of the business
![Page 24: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/24.jpg)
It must not adopt industry standard terminology
![Page 25: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/25.jpg)
It’s also not the language used by domain experts
![Page 26: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/26.jpg)
It’s a shared language developed by a team, a team composed of both domain
experts and developers
![Page 27: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/27.jpg)
Ubiquitous language develops on the way
![Page 28: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/28.jpg)
No translations between the domain experts, software
developers and the software
![Page 29: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/29.jpg)
Date - Name
![Page 30: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/30.jpg)
Ubiquitous language is important when designing the behaviour of objects
![Page 31: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/31.jpg)
Code example
Date - Name
![Page 32: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/32.jpg)
Code example
Date - Name
![Page 33: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/33.jpg)
This was kind of an extreme example
![Page 34: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/34.jpg)
Code example
Date - Name
![Page 35: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/35.jpg)
Code example
Date - Name
![Page 36: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/36.jpg)
Domains
![Page 37: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/37.jpg)
A domain, in the broad sense, is what an organisation does
![Page 38: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/38.jpg)
But the term domain is a bit overloaded
![Page 39: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/39.jpg)
So let’s use Core Domain and Subdomains
![Page 40: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/40.jpg)
The whole Domain of the organisation is composed of
Subdomains
![Page 41: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/41.jpg)
Retailer example
Date - Name
![Page 42: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/42.jpg)
But what is the Core Domain?
![Page 43: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/43.jpg)
Generic vs Supporting Subdomains
![Page 44: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/44.jpg)
Why is this so important?
![Page 45: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/45.jpg)
Developers like to focus on the technical part of a
product
![Page 46: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/46.jpg)
We focus on Entities, Value Objects, Services,
Aggregates
![Page 47: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/47.jpg)
By doing that, we blend core concepts with generic ones
![Page 48: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/48.jpg)
Causing the creation of two models into one
![Page 49: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/49.jpg)
Date - Name
![Page 50: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/50.jpg)
Agile PM tool example
Date - Name
![Page 51: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/51.jpg)
Focus on Core Domain
![Page 52: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/52.jpg)
The Domain is your problem space
![Page 53: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/53.jpg)
Domain Model
![Page 54: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/54.jpg)
What is the Domain Model?
![Page 55: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/55.jpg)
The Domain Model is your organisedand structured knowledge of the problem.• It should represent the
vocabulary and key concepts of the problem domain • It should identify the
relationships among all of the entities
![Page 56: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/56.jpg)
It could be a diagram
![Page 57: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/57.jpg)
Or written documentation
![Page 58: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/58.jpg)
But in our case..
It’s a software model of the very specific domain you are working in
![Page 59: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/59.jpg)
It should be accessible and understandable by everyone
involved in the project
![Page 60: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/60.jpg)
Bounded Contexts
![Page 61: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/61.jpg)
Bounded Context is an explicit boundary in which a
domain model exists
![Page 62: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/62.jpg)
The boundary is created because each of the model’s concepts inside, with its properties and
operations, has a special meaning
![Page 63: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/63.jpg)
Example with Bounded Contexts
Date - Name
![Page 64: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/64.jpg)
Inside a Subdomain, you can have multiple Bounded
Contexts
![Page 65: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/65.jpg)
A Bounded Context should be as big as it needs to be in order
to fully express its complete Ubiquitous Language
![Page 66: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/66.jpg)
Concepts that are not truly part of the domain should be
factored out
![Page 67: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/67.jpg)
Naming a Bounded Context
![Page 68: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/68.jpg)
So why should you do DDD?
![Page 69: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/69.jpg)
Bringing domain experts and developers to the same playing field which produces software
that makes sense to the business
![Page 70: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/70.jpg)
You would be making software that is as close as possible to what the
business leaders and experts would create if they were the developers
![Page 71: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/71.jpg)
Learning more about the business, both domain experts and developers
![Page 72: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/72.jpg)
No translations between the domain experts, software
developers and the software
![Page 73: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/73.jpg)
Centralizing knowledge is key
![Page 74: Code & Cannoli - Domain Driven Design](https://reader033.vdocuments.us/reader033/viewer/2022051404/58eff9781a28abc0188b4631/html5/thumbnails/74.jpg)
Thank you