domain driven design

124
Thursday, March 1, 2012

Upload: aoe

Post on 09-May-2015

707 views

Category:

Technology


0 download

DESCRIPTION

Mar 01, 2012 Short Domain Driven Design and UML Refresher

TRANSCRIPT

Page 1: Domain Driven Design

Thursday, March 1, 2012

Page 2: Domain Driven Design

Domain Driven Designshort Refresher

FLOW3 Usergroup @AOEby Daniel Pötzinger

Thursday, March 1, 2012

Page 3: Domain Driven Design

Thursday, March 1, 2012

Page 4: Domain Driven Design

The problem that we want to solve

Thursday, March 1, 2012

Page 5: Domain Driven Design

The problem

Thursday, March 1, 2012

Page 6: Domain Driven Design

‣ We need to write an application that solves buissiness problems

The problem

Thursday, March 1, 2012

Page 7: Domain Driven Design

‣ We need to write an application that solves buissiness problems

‣ We want to use OOP

The problem

Thursday, March 1, 2012

Page 8: Domain Driven Design

‣ We need to write an application that solves buissiness problems

‣ We want to use OOP‣ We need to find a good design:

The problem

Thursday, March 1, 2012

Page 9: Domain Driven Design

‣ We need to write an application that solves buissiness problems

‣ We want to use OOP‣ We need to find a good design:‣ understanding the problem and the buissiness

The problem

Thursday, March 1, 2012

Page 10: Domain Driven Design

‣ We need to write an application that solves buissiness problems

‣ We want to use OOP‣ We need to find a good design:‣ understanding the problem and the buissiness‣ find understandable class-structure

The problem

Thursday, March 1, 2012

Page 11: Domain Driven Design

‣ We need to write an application that solves buissiness problems

‣ We want to use OOP‣ We need to find a good design:‣ understanding the problem and the buissiness‣ find understandable class-structure‣ build maintainable software, that can be adjusted easy when the buissiness changes

The problem

Thursday, March 1, 2012

Page 12: Domain Driven Design

Thursday, March 1, 2012

Page 13: Domain Driven Design

Domain Model ?

Thursday, March 1, 2012

Page 14: Domain Driven Design

Domain Model ?

Thursday, March 1, 2012

Page 15: Domain Driven Design

‣ The domain model offers a simplified, abstract view of the problem

Domain Model

Domain Model

Thursday, March 1, 2012

Page 16: Domain Driven Design

‣ The domain model offers a simplified, abstract view of the problem

Domain Model

Domain Model

Domain Experts

Thursday, March 1, 2012

Page 17: Domain Driven Design

‣ The domain model offers a simplified, abstract view of the problem

Domain Model

Domain Model

Domain Experts

Implementators

Thursday, March 1, 2012

Page 18: Domain Driven Design

‣ The domain model offers a simplified, abstract view of the problem

Domain Model

Domain Model

Domain Experts

Implementators

Thursday, March 1, 2012

Page 19: Domain Driven Design

‣ The domain model offers a simplified, abstract view of the problem

Domain Model

Domain Model

Domain Experts

Implementators

Knowledge Crunching & Analysis

Thursday, March 1, 2012

Page 20: Domain Driven Design

‣ The domain model offers a simplified, abstract view of the problem

Domain Model

Domain Model

Domain Experts

Implementators

Knowledge Crunching & Analysis

Thursday, March 1, 2012

Page 21: Domain Driven Design

‣ a common language should be used to describe the problem

Domain Model

Domain Model

Domain Experts

Implementators

Ubiquitous Domain Language

Uses termsBoth understand

Thursday, March 1, 2012

Page 22: Domain Driven Design

‣ a common language should be used to describe the problem

Domain Model

Domain Model

Domain Experts

Implementators

Ubiquitous Domain Language

Uses termsBoth understand

Thursday, March 1, 2012

Page 23: Domain Driven Design

‣ The Domain Model can be represented as Text, Speech or Code...

Domain Model

Domain Model

Thursday, March 1, 2012

Page 24: Domain Driven Design

‣ The Domain Model can be represented as Text, Speech or Code...

Domain Model

Domain Model

Text

A customer can have multiple contracts. The customer gets monthly bills to his

billing address.

Thursday, March 1, 2012

Page 25: Domain Driven Design

‣ The Domain Model can be represented as Text, Speech or Code...

Domain Model

Domain Model

Text

UML

A customer can have multiple contracts. The customer gets monthly bills to his

billing address.

Thursday, March 1, 2012

Page 26: Domain Driven Design

‣ The Domain Model can be represented as Text, Speech or Code...

Domain Model

Domain Model

Text

UML

A customer can have multiple contracts. The customer gets monthly bills to his

billing address.

Code

Thursday, March 1, 2012

Page 27: Domain Driven Design

Thursday, March 1, 2012

Page 28: Domain Driven Design

UML

Thursday, March 1, 2012

Page 29: Domain Driven Design

•UML is perfect to describe, scetch or discuss a domain model.

UML

UML

Structural Diagrams Behavioral Diagrams

Class Diagrams Object Diagrams Sequence Diagrams Use Case Diagram ......

Thursday, March 1, 2012

Page 30: Domain Driven Design

UML - Class Diagram

Thursday, March 1, 2012

Page 31: Domain Driven Design

‣ class diagram describes the attributes and operations of a class and also the constraints imposed on the system.

UML - Class Diagram

Thursday, March 1, 2012

Page 32: Domain Driven Design

‣ class diagram describes the attributes and operations of a class and also the constraints imposed on the system.

‣ Can be directly mapped to code (OOP)

UML - Class Diagram

Thursday, March 1, 2012

Page 33: Domain Driven Design

‣ class diagram describes the attributes and operations of a class and also the constraints imposed on the system.

‣ Can be directly mapped to code (OOP)‣ Popular use-case is to explain conceptual important

parts => keep it simple („draw it on a paper“)

UML - Class Diagram

Thursday, March 1, 2012

Page 34: Domain Driven Design

‣ classes with:‣ attributes (<name>:<type> )‣methods ‣ annotations and properties

‣ Associations‣Multiplicity, roles‣ Traversal‣Aggregation, Composition

‣ Inheritance, Dependency‣ Qualifier ‣ Association Class

UML - Class Diagram - Examples

Thursday, March 1, 2012

Page 35: Domain Driven Design

‣ Depend on class diagrams‣ „Snapshot“ of instances and theire relations‣ Perfect to understand object behaviour and their

relationship from practical perspective

UML - Object Diagram

Thursday, March 1, 2012

Page 36: Domain Driven Design

‣ Depend on class diagrams‣ Perfect to explain how objects work together to

„fulfill“ a use-case.‣ useful to detect weakness and improvements in your

design

UML - Sequence Diagram

Thursday, March 1, 2012

Page 37: Domain Driven Design

Thursday, March 1, 2012

Page 38: Domain Driven Design

Domain Driven DesignBasics

Thursday, March 1, 2012

Page 39: Domain Driven Design

1. Layered Architecture2. Common Building Blocks and Rules3. Find a „supple design“4. See the big picture

Domain Driven Design - Basics

Thursday, March 1, 2012

Page 40: Domain Driven Design

DDD - Layered Architecture

Thursday, March 1, 2012

Page 41: Domain Driven Design

DDD - Layered Architecture

Infrastructure / SystemLogging

PersitenceSpeaking to Webservices

File Formats

Thursday, March 1, 2012

Page 42: Domain Driven Design

DDD - Layered Architecture

Domain Model

Infrastructure / SystemLogging

PersitenceSpeaking to Webservices

File Formats

Core Business Logic

Thursday, March 1, 2012

Page 43: Domain Driven Design

DDD - Layered Architecture

Domain Model

Application Layer (thin)

Infrastructure / SystemLogging

PersitenceSpeaking to Webservices

File Formats

Core Business Logic

Controller / (Export/Import)

Thursday, March 1, 2012

Page 44: Domain Driven Design

DDD - Layered Architecture

Domain Model

Application Layer (thin)

Infrastructure / SystemLogging

PersitenceSpeaking to Webservices

File Formats

Core Business Logic

Controller / (Export/Import)User / Other Apps

Thursday, March 1, 2012

Page 45: Domain Driven Design

DDD - Layered Architecture

Domain Model

Application Layer (thin)

View

Infrastructure / SystemLogging

PersitenceSpeaking to Webservices

File Formats

Core Business Logic

Controller / (Export/Import)

Templates / Presentation Objects

User / Other Apps

Thursday, March 1, 2012

Page 46: Domain Driven Design

Thursday, March 1, 2012

Page 47: Domain Driven Design

Building Blocks

Thursday, March 1, 2012

Page 48: Domain Driven Design

Building Blocks

Thursday, March 1, 2012

Page 49: Domain Driven Design

DDD - Building Blocks

Thursday, March 1, 2012

Page 50: Domain Driven Design

DDD - Building Blocks

Entities

Thursday, March 1, 2012

Page 51: Domain Driven Design

DDD - Building Blocks

Entities

Values

Thursday, March 1, 2012

Page 52: Domain Driven Design

DDD - Building Blocks

Entities

Values

Services

Thursday, March 1, 2012

Page 53: Domain Driven Design

DDD - Building Blocks

Entities

Values

Services

Repository

Thursday, March 1, 2012

Page 54: Domain Driven Design

DDD - Building Blocks

Entities

Values

Services

Repository

Factory

Thursday, March 1, 2012

Page 55: Domain Driven Design

DDD - Building Blocks

Thursday, March 1, 2012

Page 56: Domain Driven Design

DDD - Building Blocks

Entities

Thursday, March 1, 2012

Page 57: Domain Driven Design

DDD - Building Blocks

Entities

Object which is primary defined by its identity (not by attributes). For example "Person", "Car", "Costumer" or "BankTransaction".

Thursday, March 1, 2012

Page 58: Domain Driven Design

DDD - Building Blocks

Entities

Object which is primary defined by its identity (not by attributes). For example "Person", "Car", "Costumer" or "BankTransaction".

• often has some ID value

Thursday, March 1, 2012

Page 59: Domain Driven Design

DDD - Building Blocks

Entities

Object which is primary defined by its identity (not by attributes). For example "Person", "Car", "Costumer" or "BankTransaction".

• often has some ID value• continuity through livecycle

Thursday, March 1, 2012

Page 60: Domain Driven Design

DDD - Building Blocks

Entities

Object which is primary defined by its identity (not by attributes). For example "Person", "Car", "Costumer" or "BankTransaction".

• often has some ID value• continuity through livecycle• keep class definition simple / focus on live cycle

Thursday, March 1, 2012

Page 61: Domain Driven Design

DDD - Building Blocks

Thursday, March 1, 2012

Page 62: Domain Driven Design

DDD - Building Blocks

Value

Thursday, March 1, 2012

Page 63: Domain Driven Design

DDD - Building Blocks

Value

describe the characteristic of a thing and identity is not required. (We care what they are - not who) Example: address, color ...

Thursday, March 1, 2012

Page 64: Domain Driven Design

DDD - Building Blocks

Value

describe the characteristic of a thing and identity is not required. (We care what they are - not who) Example: address, color ...

• should represent a whole value (conceptual thing )

Thursday, March 1, 2012

Page 65: Domain Driven Design

DDD - Building Blocks

Value

describe the characteristic of a thing and identity is not required. (We care what they are - not who) Example: address, color ...

• should represent a whole value (conceptual thing )• Often passed as arguments

Thursday, March 1, 2012

Page 66: Domain Driven Design

DDD - Building Blocks

Value

describe the characteristic of a thing and identity is not required. (We care what they are - not who) Example: address, color ...

• should represent a whole value (conceptual thing )• Often passed as arguments• No Identity gives freedom

Thursday, March 1, 2012

Page 67: Domain Driven Design

DDD - Building Blocks

Value

describe the characteristic of a thing and identity is not required. (We care what they are - not who) Example: address, color ...

• should represent a whole value (conceptual thing )• Often passed as arguments• No Identity gives freedom• should be Immutable!

Thursday, March 1, 2012

Page 68: Domain Driven Design

DDD - Building Blocks

Thursday, March 1, 2012

Page 69: Domain Driven Design

DDD - Building Blocks

Service

Thursday, March 1, 2012

Page 70: Domain Driven Design

DDD - Building Blocks

Service

“...if a single process or transformation in domain is not a natural responsibility of an entity or value => make it a standalone service with a nice interface."

Thursday, March 1, 2012

Page 71: Domain Driven Design

DDD - Building Blocks

Service

“...if a single process or transformation in domain is not a natural responsibility of an entity or value => make it a standalone service with a nice interface."

• stateless

Thursday, March 1, 2012

Page 72: Domain Driven Design

DDD - Building Blocks

Service

“...if a single process or transformation in domain is not a natural responsibility of an entity or value => make it a standalone service with a nice interface."

• stateless• offer a useful service or action and deals with other domain objects

Thursday, March 1, 2012

Page 73: Domain Driven Design

DDD - Building Blocks

Service

“...if a single process or transformation in domain is not a natural responsibility of an entity or value => make it a standalone service with a nice interface."

• stateless• offer a useful service or action and deals with other domain objects• defined in common domain language

Thursday, March 1, 2012

Page 74: Domain Driven Design

DDD - Building Blocks

Service

“...if a single process or transformation in domain is not a natural responsibility of an entity or value => make it a standalone service with a nice interface."

• stateless• offer a useful service or action and deals with other domain objects• defined in common domain language• do not mix with other layers

Thursday, March 1, 2012

Page 75: Domain Driven Design

DDD - Building Blocks

Service

“...if a single process or transformation in domain is not a natural responsibility of an entity or value => make it a standalone service with a nice interface."

• stateless• offer a useful service or action and deals with other domain objects• defined in common domain language• do not mix with other layersExamples: FundTransferService / PackageRoutingService / SimCardActivationService

Thursday, March 1, 2012

Page 76: Domain Driven Design

DDD - Building Blocks

Thursday, March 1, 2012

Page 77: Domain Driven Design

DDD - Building Blocks

Repository

Thursday, March 1, 2012

Page 78: Domain Driven Design

DDD - Building Blocks

Repository

For each object where you need global access create a repository object that can provide the illusion of an in memory collection of all objects of that type. Setup access through a well knows global interface.

Thursday, March 1, 2012

Page 79: Domain Driven Design

DDD - Building Blocks

Repository

For each object where you need global access create a repository object that can provide the illusion of an in memory collection of all objects of that type. Setup access through a well knows global interface.

• typicaly methods for add() remove() and find*()

Thursday, March 1, 2012

Page 80: Domain Driven Design

DDD - Building Blocks

Repository

For each object where you need global access create a repository object that can provide the illusion of an in memory collection of all objects of that type. Setup access through a well knows global interface.

• typicaly methods for add() remove() and find*()•find* methods communicate design decisions about how to access the data

Thursday, March 1, 2012

Page 81: Domain Driven Design

DDD - Building Blocks

Repository

For each object where you need global access create a repository object that can provide the illusion of an in memory collection of all objects of that type. Setup access through a well knows global interface.

• typicaly methods for add() remove() and find*()•find* methods communicate design decisions about how to access the data• ..reconstitution?

Thursday, March 1, 2012

Page 82: Domain Driven Design

DDD - Building Blocks

Thursday, March 1, 2012

Page 83: Domain Driven Design

DDD - Building Blocks

Factory

Thursday, March 1, 2012

Page 84: Domain Driven Design

DDD - Building Blocks

Factory

A factory hides logic for building objects - this is especially relevant for aggregates!

Thursday, March 1, 2012

Page 85: Domain Driven Design

DDD - Building Blocks

Factory

A factory hides logic for building objects - this is especially relevant for aggregates!

• atomic (need to pass all essential parameters)

Thursday, March 1, 2012

Page 86: Domain Driven Design

DDD - Building Blocks

Factory

A factory hides logic for building objects - this is especially relevant for aggregates!

• atomic (need to pass all essential parameters)• not allowed to give wrong results (exceptions)

Thursday, March 1, 2012

Page 87: Domain Driven Design

DDD - Building Blocks

Factory

A factory hides logic for building objects - this is especially relevant for aggregates!

• atomic (need to pass all essential parameters)• not allowed to give wrong results (exceptions)• entity vs. value factories

Thursday, March 1, 2012

Page 88: Domain Driven Design

DDD - Building Blocks

Factory

A factory hides logic for building objects - this is especially relevant for aggregates!

• atomic (need to pass all essential parameters)• not allowed to give wrong results (exceptions)• entity vs. value factories• (can also be used for reconstitution )

Thursday, March 1, 2012

Page 89: Domain Driven Design

Thursday, March 1, 2012

Page 90: Domain Driven Design

Find a Supple Design

Thursday, March 1, 2012

Page 91: Domain Driven Design

Find a Supple Design

vs.

Thursday, March 1, 2012

Page 92: Domain Driven Design

Supple Design „Speak in Domain Language“

Thursday, March 1, 2012

Page 93: Domain Driven Design

‣ Try to explain scenarios loud with the use of the model and the ubiquitous language

Supple Design „Speak in Domain Language“

Thursday, March 1, 2012

Page 94: Domain Driven Design

‣ Try to explain scenarios loud with the use of the model and the ubiquitous language

‣ Try to explain scenarios more simple/better (find easier ways to say what you need to say). => That helps refining the model.

Supple Design „Speak in Domain Language“

Thursday, March 1, 2012

Page 95: Domain Driven Design

Supple Design „Reduce Associations“

Thursday, March 1, 2012

Page 96: Domain Driven Design

‣ Avoid many association and use only a minimum of relations because they decrease maintainability!

Supple Design „Reduce Associations“

Thursday, March 1, 2012

Page 97: Domain Driven Design

‣ Avoid many association and use only a minimum of relations because they decrease maintainability!

‣ traversal instead of bidirectional

Supple Design „Reduce Associations“

Thursday, March 1, 2012

Page 98: Domain Driven Design

‣ Avoid many association and use only a minimum of relations because they decrease maintainability!

‣ traversal instead of bidirectional‣ adding qualifier to reduce multiplicity (class missing?)

Supple Design „Reduce Associations“

Thursday, March 1, 2012

Page 99: Domain Driven Design

‣ Avoid many association and use only a minimum of relations because they decrease maintainability!

‣ traversal instead of bidirectional‣ adding qualifier to reduce multiplicity (class missing?)‣ eliminate non essential assoc.

Supple Design „Reduce Associations“

Thursday, March 1, 2012

Page 100: Domain Driven Design

‣ Avoid many association and use only a minimum of relations because they decrease maintainability!

‣ traversal instead of bidirectional‣ adding qualifier to reduce multiplicity (class missing?)‣ eliminate non essential assoc.‣ find and use aggregates

Supple Design „Reduce Associations“

Thursday, March 1, 2012

Page 101: Domain Driven Design

‣ Avoid many association and use only a minimum of relations because they decrease maintainability!

‣ traversal instead of bidirectional‣ adding qualifier to reduce multiplicity (class missing?)‣ eliminate non essential assoc.‣ find and use aggregates

=> Intuition and Refactoring

Supple Design „Reduce Associations“

Thursday, March 1, 2012

Page 102: Domain Driven Design

‣ Avoid many association and use only a minimum of relations because they decrease maintainability!

‣ traversal instead of bidirectional‣ adding qualifier to reduce multiplicity (class missing?)‣ eliminate non essential assoc.‣ find and use aggregates

=> Intuition and Refactoring

... country / president example ...

Supple Design „Reduce Associations“

Thursday, March 1, 2012

Page 103: Domain Driven Design

Supple Design - Aggregates

Thursday, March 1, 2012

Page 104: Domain Driven Design

Supple Design - Aggregates

‣ An aggregate is a group of objects that belong together (a group of individual objects that represents a unit)

Thursday, March 1, 2012

Page 105: Domain Driven Design

Supple Design - Aggregates

‣ An aggregate is a group of objects that belong together (a group of individual objects that represents a unit)

‣ ...car example... (root, boundary, invariants )

Thursday, March 1, 2012

Page 106: Domain Driven Design

Supple Design - „Explicit constrains“

Thursday, March 1, 2012

Page 107: Domain Driven Design

Supple Design - „Explicit constrains“

‣ name and make constrains explicit. That gives it a name you can talk about and the code is more understandable

Thursday, March 1, 2012

Page 108: Domain Driven Design

Supple Design - „Explicit constrains“

‣ name and make constrains explicit. That gives it a name you can talk about and the code is more understandable

Bucket example

Thursday, March 1, 2012

Page 109: Domain Driven Design

Supple Design - „Specifications“

Thursday, March 1, 2012

Page 110: Domain Driven Design

Supple Design - „Specifications“

‣ you can use „Specifications“ to explicit express rules

Thursday, March 1, 2012

Page 111: Domain Driven Design

Supple Design - „Specifications“

‣ you can use „Specifications“ to explicit express rules

examples:

Thursday, March 1, 2012

Page 112: Domain Driven Design

Supple Design - „Specifications“

‣ you can use „Specifications“ to explicit express rules

examples:„InventoryDelinquentSpecification“->isSatisfied()

Thursday, March 1, 2012

Page 113: Domain Driven Design

Supple Design - „Specifications“

‣ you can use „Specifications“ to explicit express rules

examples:„InventoryDelinquentSpecification“->isSatisfied()„GoldenCustomerSpecification“->isSatisfied($customer)

Thursday, March 1, 2012

Page 114: Domain Driven Design

Supple Design - Modules

If your model tells a story a module is a chapterThursday, March 1, 2012

Page 115: Domain Driven Design

Supple Design - Modules

Customer Order

Product

Customer Contract Basket Order

OrderItems

AbstractProduct

Prepaid

Thursday, March 1, 2012

Page 116: Domain Driven Design

Supple Design - Modules

Customer Order

Product

Customer Contract Basket Order

OrderItems

AbstractProduct

Prepaid

• group by meaning in the domain

Thursday, March 1, 2012

Page 117: Domain Driven Design

Supple Design - Modules

Customer Order

Product

Customer Contract Basket Order

OrderItems

AbstractProduct

Prepaid

• group by meaning in the domain• loose coupling between modules

Thursday, March 1, 2012

Page 118: Domain Driven Design

Supple Design - What else

Thursday, March 1, 2012

Page 119: Domain Driven Design

Supple Design - What else

• Intention Revalving Interfaces

Thursday, March 1, 2012

Page 120: Domain Driven Design

Supple Design - What else

• Intention Revalving Interfaces• standalone classes where possible

Thursday, March 1, 2012

Page 121: Domain Driven Design

Supple Design - What else

• Intention Revalving Interfaces• standalone classes where possible• closure of operations

Thursday, March 1, 2012

Page 122: Domain Driven Design

Supple Design - What else

• Intention Revalving Interfaces• standalone classes where possible• closure of operations• side effect free functions

Thursday, March 1, 2012

Page 123: Domain Driven Design

Thank you for great year!

Thursday, March 1, 2012

Page 124: Domain Driven Design

Thank you for great year!Thanks

Thursday, March 1, 2012