Code & Cannoli - Domain Driven Design

74
Introduction to Domain Driven Design

Transcript of Code & Cannoli - Domain Driven Design

Page 1: Code & Cannoli - Domain Driven Design

Introduction to Domain Driven Design

Page 2: Code & Cannoli - Domain Driven Design

Frank Levering• PHP Developer • DevMob

Page 3: Code & Cannoli - Domain Driven Design

Quality software• Writing tests • Using design patterns • Manual testing • SOLID

Page 4: Code & Cannoli - Domain Driven Design

Quality software doesn’t give an insurance for a quality

software model

Page 5: Code & Cannoli - Domain Driven Design

Code example

Date - Name

Page 6: Code & Cannoli - Domain Driven Design

It saves a customer no matter what, awesome right?

Page 7: Code & Cannoli - Domain Driven Design

This model is suffering from Anemia

Page 8: Code & Cannoli - Domain Driven Design

We have no idea under what business situations this

method is used

Page 9: Code & Cannoli - Domain Driven Design

And it even gets worse

Page 10: Code & Cannoli - Domain Driven Design

Code example

Date - Name

Page 11: Code & Cannoli - Domain Driven Design

Can we really test this?

Page 12: Code & Cannoli - Domain Driven Design

DDD helps you creating a more high-quality software

model

Page 13: Code & Cannoli - Domain Driven Design

It helps you create software that makes sense to the

business

Page 14: Code & Cannoli - Domain Driven Design

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

Disclaimer• A domain is not DNS or

anything internet related • Domain is the area your

business relies

Page 16: Code & Cannoli - Domain Driven Design

So how does DDD work?• Strategic design • Tactical design

Page 17: Code & Cannoli - Domain Driven Design

We will mostly be talking about strategic design today

Page 18: Code & Cannoli - Domain Driven Design

Key concepts of strategic design• Domain experts • Ubiquitous language • Core Domains, Subdomains

and Domain Models • Bounded Contexts

Page 19: Code & Cannoli - Domain Driven Design

Not doing any strategic design results in doing DDD-

Lite

Page 20: Code & Cannoli - Domain Driven Design

Domain experts

Page 21: Code & Cannoli - Domain Driven Design

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

Introducing Ubiquitous language

Page 23: Code & Cannoli - Domain Driven Design

It’s not the language of the business

Page 24: Code & Cannoli - Domain Driven Design

It must not adopt industry standard terminology

Page 25: Code & Cannoli - Domain Driven Design

It’s also not the language used by domain experts

Page 26: Code & Cannoli - Domain Driven Design

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

Ubiquitous language develops on the way

Page 28: Code & Cannoli - Domain Driven Design

No translations between the domain experts, software

developers and the software

Page 29: Code & Cannoli - Domain Driven Design

Date - Name

Page 30: Code & Cannoli - Domain Driven Design

Ubiquitous language is important when designing the behaviour of objects

Page 31: Code & Cannoli - Domain Driven Design

Code example

Date - Name

Page 32: Code & Cannoli - Domain Driven Design

Code example

Date - Name

Page 33: Code & Cannoli - Domain Driven Design

This was kind of an extreme example

Page 34: Code & Cannoli - Domain Driven Design

Code example

Date - Name

Page 35: Code & Cannoli - Domain Driven Design

Code example

Date - Name

Page 36: Code & Cannoli - Domain Driven Design

Domains

Page 37: Code & Cannoli - Domain Driven Design

A domain, in the broad sense, is what an organisation does

Page 38: Code & Cannoli - Domain Driven Design

But the term domain is a bit overloaded

Page 39: Code & Cannoli - Domain Driven Design

So let’s use Core Domain and Subdomains

Page 40: Code & Cannoli - Domain Driven Design

The whole Domain of the organisation is composed of

Subdomains

Page 41: Code & Cannoli - Domain Driven Design

Retailer example

Date - Name

Page 42: Code & Cannoli - Domain Driven Design

But what is the Core Domain?

Page 43: Code & Cannoli - Domain Driven Design

Generic vs Supporting Subdomains

Page 44: Code & Cannoli - Domain Driven Design

Why is this so important?

Page 45: Code & Cannoli - Domain Driven Design

Developers like to focus on the technical part of a

product

Page 46: Code & Cannoli - Domain Driven Design

We focus on Entities, Value Objects, Services,

Aggregates

Page 47: Code & Cannoli - Domain Driven Design

By doing that, we blend core concepts with generic ones

Page 48: Code & Cannoli - Domain Driven Design

Causing the creation of two models into one

Page 49: Code & Cannoli - Domain Driven Design

Date - Name

Page 50: Code & Cannoli - Domain Driven Design

Agile PM tool example

Date - Name

Page 51: Code & Cannoli - Domain Driven Design

Focus on Core Domain

Page 52: Code & Cannoli - Domain Driven Design

The Domain is your problem space

Page 53: Code & Cannoli - Domain Driven Design

Domain Model

Page 54: Code & Cannoli - Domain Driven Design

What is the Domain Model?

Page 55: Code & Cannoli - Domain Driven Design

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

It could be a diagram

Page 57: Code & Cannoli - Domain Driven Design

Or written documentation

Page 58: Code & Cannoli - Domain Driven Design

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

It should be accessible and understandable by everyone

involved in the project

Page 60: Code & Cannoli - Domain Driven Design

Bounded Contexts

Page 61: Code & Cannoli - Domain Driven Design

Bounded Context is an explicit boundary in which a

domain model exists

Page 62: Code & Cannoli - Domain Driven Design

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

Example with Bounded Contexts

Date - Name

Page 64: Code & Cannoli - Domain Driven Design

Inside a Subdomain, you can have multiple Bounded

Contexts

Page 65: Code & Cannoli - Domain Driven Design

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

Concepts that are not truly part of the domain should be

factored out

Page 67: Code & Cannoli - Domain Driven Design

Naming a Bounded Context

Page 68: Code & Cannoli - Domain Driven Design

So why should you do DDD?

Page 69: Code & Cannoli - Domain Driven Design

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

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

Learning more about the business, both domain experts and developers

Page 72: Code & Cannoli - Domain Driven Design

No translations between the domain experts, software

developers and the software

Page 73: Code & Cannoli - Domain Driven Design

Centralizing knowledge is key

Page 74: Code & Cannoli - Domain Driven Design

Thank you