SlideShare uma empresa Scribd logo
1 de 124
Baixar para ler offline
Thursday, March 1, 2012
Domain Driven Design
short Refresher
FLOW3 Usergroup @AOE
by Daniel Pötzinger
Thursday, March 1, 2012
Thursday, March 1, 2012
The problem that we want to
solve
Thursday, March 1, 2012
The problem
Thursday, March 1, 2012
‣ We need to write an application that solves
buissiness problems
The problem
Thursday, March 1, 2012
‣ We need to write an application that solves
buissiness problems
‣ We want to use OOP
The problem
Thursday, March 1, 2012
‣ 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
‣ 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
‣ 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
‣ 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
Thursday, March 1, 2012
Domain Model ?
Thursday, March 1, 2012
Domain Model ?
Thursday, March 1, 2012
‣ The domain model offers a simplified, abstract view of
the problem
Domain Model
Domain Model
Thursday, March 1, 2012
‣ The domain model offers a simplified, abstract view of
the problem
Domain Model
Domain Model
Domain Experts
Thursday, March 1, 2012
‣ The domain model offers a simplified, abstract view of
the problem
Domain Model
Domain Model
Domain Experts
Implementators
Thursday, March 1, 2012
‣ The domain model offers a simplified, abstract view of
the problem
Domain Model
Domain Model
Domain Experts
Implementators
Thursday, March 1, 2012
‣ 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
‣ 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
‣ a common language should be used to describe the
problem
Domain Model
Domain Model
Domain Experts
Implementators
Ubiquitous
Domain Language
Uses terms
Both understand
Thursday, March 1, 2012
‣ a common language should be used to describe the
problem
Domain Model
Domain Model
Domain Experts
Implementators
Ubiquitous
Domain Language
Uses terms
Both understand
Thursday, March 1, 2012
‣ The Domain Model can be represented as Text, Speech
or Code...
Domain Model
Domain Model
Thursday, March 1, 2012
‣ 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
‣ 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
‣ 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
Thursday, March 1, 2012
UML
Thursday, March 1, 2012
•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
UML - Class Diagram
Thursday, March 1, 2012
‣ 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
‣ 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
‣ 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
‣ 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
‣ 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
‣ 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
Thursday, March 1, 2012
Domain Driven Design
Basics
Thursday, March 1, 2012
1. Layered Architecture
2. Common Building Blocks and Rules
3. Find a „supple design“
4. See the big picture
Domain Driven Design - Basics
Thursday, March 1, 2012
DDD - Layered Architecture
Thursday, March 1, 2012
DDD - Layered Architecture
Infrastructure / System
Logging
Persitence
Speaking to Webservices
File Formats
Thursday, March 1, 2012
DDD - Layered Architecture
Domain Model
Infrastructure / System
Logging
Persitence
Speaking to Webservices
File Formats
Core Business Logic
Thursday, March 1, 2012
DDD - Layered Architecture
Domain Model
Application Layer (thin)
Infrastructure / System
Logging
Persitence
Speaking to Webservices
File Formats
Core Business Logic
Controller / (Export/Import)
Thursday, March 1, 2012
DDD - Layered Architecture
Domain Model
Application Layer (thin)
Infrastructure / System
Logging
Persitence
Speaking to Webservices
File Formats
Core Business Logic
Controller / (Export/Import)User /
Other Apps
Thursday, March 1, 2012
DDD - Layered Architecture
Domain Model
Application Layer (thin)
View
Infrastructure / System
Logging
Persitence
Speaking to Webservices
File Formats
Core Business Logic
Controller / (Export/Import)
Templates / Presentation Objects
User /
Other Apps
Thursday, March 1, 2012
Thursday, March 1, 2012
Building Blocks
Thursday, March 1, 2012
Building Blocks
Thursday, March 1, 2012
DDD - Building Blocks
Thursday, March 1, 2012
DDD - Building Blocks
Entities
Thursday, March 1, 2012
DDD - Building Blocks
Entities
Values
Thursday, March 1, 2012
DDD - Building Blocks
Entities
Values
Services
Thursday, March 1, 2012
DDD - Building Blocks
Entities
Values
Services
Repository
Thursday, March 1, 2012
DDD - Building Blocks
Entities
Values
Services
Repository
Factory
Thursday, March 1, 2012
DDD - Building Blocks
Thursday, March 1, 2012
DDD - Building Blocks
Entities
Thursday, March 1, 2012
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
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
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
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
DDD - Building Blocks
Thursday, March 1, 2012
DDD - Building Blocks
Value
Thursday, March 1, 2012
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
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
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
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
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
DDD - Building Blocks
Thursday, March 1, 2012
DDD - Building Blocks
Service
Thursday, March 1, 2012
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
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
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
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
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
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
Examples: FundTransferService / PackageRoutingService / SimCardActivationService
Thursday, March 1, 2012
DDD - Building Blocks
Thursday, March 1, 2012
DDD - Building Blocks
Repository
Thursday, March 1, 2012
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
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
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
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
DDD - Building Blocks
Thursday, March 1, 2012
DDD - Building Blocks
Factory
Thursday, March 1, 2012
DDD - Building Blocks
Factory
A factory hides logic for building objects - this is
especially relevant for aggregates!
Thursday, March 1, 2012
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
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
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
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
Thursday, March 1, 2012
Find a Supple Design
Thursday, March 1, 2012
Find a Supple Design
vs.
Thursday, March 1, 2012
Supple Design „Speak in Domain Language“
Thursday, March 1, 2012
‣ 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
‣ 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
Supple Design „Reduce Associations“
Thursday, March 1, 2012
‣ Avoid many association and use only a minimum of
relations because they decrease maintainability!
Supple Design „Reduce Associations“
Thursday, March 1, 2012
‣ 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
‣ 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
‣ 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
‣ 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
‣ 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
‣ 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
Supple Design - Aggregates
Thursday, March 1, 2012
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
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
Supple Design - „Explicit constrains“
Thursday, March 1, 2012
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
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
Supple Design - „Specifications“
Thursday, March 1, 2012
Supple Design - „Specifications“
‣ you can use „Specifications“ to explicit express rules
Thursday, March 1, 2012
Supple Design - „Specifications“
‣ you can use „Specifications“ to explicit express rules
examples:
Thursday, March 1, 2012
Supple Design - „Specifications“
‣ you can use „Specifications“ to explicit express rules
examples:
„InventoryDelinquentSpecification“->isSatisfied()
Thursday, March 1, 2012
Supple Design - „Specifications“
‣ you can use „Specifications“ to explicit express rules
examples:
„InventoryDelinquentSpecification“->isSatisfied()
„GoldenCustomerSpecification“->isSatisfied($customer)
Thursday, March 1, 2012
Supple Design - Modules
If your model tells a story a module is a chapter
Thursday, March 1, 2012
Supple Design - Modules
Customer Order
Product
Customer Contract Basket Order
OrderItems
AbstractProduct
Prepaid
Thursday, March 1, 2012
Supple Design - Modules
Customer Order
Product
Customer Contract Basket Order
OrderItems
AbstractProduct
Prepaid
• group by meaning in the domain
Thursday, March 1, 2012
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
Supple Design - What else
Thursday, March 1, 2012
Supple Design - What else
• Intention Revalving Interfaces
Thursday, March 1, 2012
Supple Design - What else
• Intention Revalving Interfaces
• standalone classes where possible
Thursday, March 1, 2012
Supple Design - What else
• Intention Revalving Interfaces
• standalone classes where possible
• closure of operations
Thursday, March 1, 2012
Supple Design - What else
• Intention Revalving Interfaces
• standalone classes where possible
• closure of operations
• side effect free functions
Thursday, March 1, 2012
Thank you for great year!
Thursday, March 1, 2012
Thank you for great year!
Thanks
Thursday, March 1, 2012

Mais conteúdo relacionado

Semelhante a Domain Driven Design

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignAOE
 
Importance Of Being Driven
Importance Of Being DrivenImportance Of Being Driven
Importance Of Being DrivenAntonio Terreno
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignLalit Kale
 
Sig A&D - Documentation And Communication
Sig A&D - Documentation And CommunicationSig A&D - Documentation And Communication
Sig A&D - Documentation And CommunicationDavid Meijers
 
How to integrate the results of the Country Reports in the Semantic Wiki
How to integrate the results of the Country Reports in the Semantic WikiHow to integrate the results of the Country Reports in the Semantic Wiki
How to integrate the results of the Country Reports in the Semantic WikiAtrium Forest
 
Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...
Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...
Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...Wooga
 
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
 
Design Types
Design TypesDesign Types
Design Types1&1
 
Multilingual solutions florian loretan
Multilingual solutions florian loretanMultilingual solutions florian loretan
Multilingual solutions florian loretandrupalconf
 
Feedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPFeedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPStephen Gilmore
 
Object-Oriented Analysis and Design
Object-Oriented Analysis and DesignObject-Oriented Analysis and Design
Object-Oriented Analysis and DesignRiazAhmad786
 
Help Me Design A Better Homepage
Help Me Design A Better HomepageHelp Me Design A Better Homepage
Help Me Design A Better Homepagejtcchan
 
Inventing The Next Business Programming Language
Inventing The Next Business Programming LanguageInventing The Next Business Programming Language
Inventing The Next Business Programming LanguageRichard Green
 
PHP development for large agile projects
PHP development for large agile projectsPHP development for large agile projects
PHP development for large agile projectsGrzegorz Godlewski
 
Introduction to Object Oriented Design
Introduction to Object Oriented DesignIntroduction to Object Oriented Design
Introduction to Object Oriented DesignComputing Cage
 
NCDevCon2012_designing the mobile experience
NCDevCon2012_designing the mobile experienceNCDevCon2012_designing the mobile experience
NCDevCon2012_designing the mobile experienceDee Sadler
 
Constructing a Contemporary Textbook
Constructing a Contemporary TextbookConstructing a Contemporary Textbook
Constructing a Contemporary TextbookRandy Connolly
 

Semelhante a Domain Driven Design (20)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
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
 
Sig A&D - Documentation And Communication
Sig A&D - Documentation And CommunicationSig A&D - Documentation And Communication
Sig A&D - Documentation And Communication
 
How to integrate the results of the Country Reports in the Semantic Wiki
How to integrate the results of the Country Reports in the Semantic WikiHow to integrate the results of the Country Reports in the Semantic Wiki
How to integrate the results of the Country Reports in the Semantic Wiki
 
Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...
Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...
Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...
 
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
 
Design Types
Design TypesDesign Types
Design Types
 
Ooad
OoadOoad
Ooad
 
Multilingual solutions florian loretan
Multilingual solutions florian loretanMultilingual solutions florian loretan
Multilingual solutions florian loretan
 
Feedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPFeedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLP
 
Object-Oriented Analysis and Design
Object-Oriented Analysis and DesignObject-Oriented Analysis and Design
Object-Oriented Analysis and Design
 
Help Me Design A Better Homepage
Help Me Design A Better HomepageHelp Me Design A Better Homepage
Help Me Design A Better Homepage
 
Inventing The Next Business Programming Language
Inventing The Next Business Programming LanguageInventing The Next Business Programming Language
Inventing The Next Business Programming Language
 
PHP development for large agile projects
PHP development for large agile projectsPHP development for large agile projects
PHP development for large agile projects
 
Introduction to Object Oriented Design
Introduction to Object Oriented DesignIntroduction to Object Oriented Design
Introduction to Object Oriented Design
 
NCDevCon2012_designing the mobile experience
NCDevCon2012_designing the mobile experienceNCDevCon2012_designing the mobile experience
NCDevCon2012_designing the mobile experience
 
Constructing a Contemporary Textbook
Constructing a Contemporary TextbookConstructing a Contemporary Textbook
Constructing a Contemporary Textbook
 
OOA&D Lecture1
OOA&D Lecture1OOA&D Lecture1
OOA&D Lecture1
 
Object Oriented Analysis and Design
Object Oriented Analysis and DesignObject Oriented Analysis and Design
Object Oriented Analysis and Design
 

Mais de AOE

Re-inventing airport non-aeronautical revenue generation post COVID-19
Re-inventing airport non-aeronautical revenue generation post COVID-19Re-inventing airport non-aeronautical revenue generation post COVID-19
Re-inventing airport non-aeronautical revenue generation post COVID-19AOE
 
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019AOE
 
Flamingo presentation at code.talks commerce by Daniel Pötzinger
Flamingo presentation at code.talks commerce by Daniel PötzingerFlamingo presentation at code.talks commerce by Daniel Pötzinger
Flamingo presentation at code.talks commerce by Daniel PötzingerAOE
 
A bag full of trust - Christof Braun at AOE Conference 2018
A bag full of trust - Christof Braun at AOE Conference 2018A bag full of trust - Christof Braun at AOE Conference 2018
A bag full of trust - Christof Braun at AOE Conference 2018AOE
 
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...AOE
 
Frankfurt Airport Digitalization Case Study
Frankfurt Airport Digitalization Case StudyFrankfurt Airport Digitalization Case Study
Frankfurt Airport Digitalization Case StudyAOE
 
This is what has to change for Travel Retail to survive - Manuel Heidler, AOE
This is what has to change for Travel Retail to survive - Manuel Heidler, AOEThis is what has to change for Travel Retail to survive - Manuel Heidler, AOE
This is what has to change for Travel Retail to survive - Manuel Heidler, AOEAOE
 
AOEconf17: Application Security
AOEconf17: Application SecurityAOEconf17: Application Security
AOEconf17: Application SecurityAOE
 
AOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOE
 
AOEconf17: A flight through our OM³ Systems
AOEconf17: A flight through our OM³ SystemsAOEconf17: A flight through our OM³ Systems
AOEconf17: A flight through our OM³ SystemsAOE
 
AOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOE
 
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...AOE
 
AOEconf17: Agile scaling concepts
AOEconf17: Agile scaling conceptsAOEconf17: Agile scaling concepts
AOEconf17: Agile scaling conceptsAOE
 
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOE
 
AOEconf17: UI challenges in a microservice world
AOEconf17: UI challenges in a microservice worldAOEconf17: UI challenges in a microservice world
AOEconf17: UI challenges in a microservice worldAOE
 
AOEconf17: Application Security - Bastian Ike
AOEconf17: Application Security - Bastian IkeAOEconf17: Application Security - Bastian Ike
AOEconf17: Application Security - Bastian IkeAOE
 
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...AOE
 
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan RotschAOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan RotschAOE
 
Joern Bock: The basic concept of an agile organisation
Joern Bock: The basic concept of an agile organisationJoern Bock: The basic concept of an agile organisation
Joern Bock: The basic concept of an agile organisationAOE
 
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...AOE
 

Mais de AOE (20)

Re-inventing airport non-aeronautical revenue generation post COVID-19
Re-inventing airport non-aeronautical revenue generation post COVID-19Re-inventing airport non-aeronautical revenue generation post COVID-19
Re-inventing airport non-aeronautical revenue generation post COVID-19
 
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
 
Flamingo presentation at code.talks commerce by Daniel Pötzinger
Flamingo presentation at code.talks commerce by Daniel PötzingerFlamingo presentation at code.talks commerce by Daniel Pötzinger
Flamingo presentation at code.talks commerce by Daniel Pötzinger
 
A bag full of trust - Christof Braun at AOE Conference 2018
A bag full of trust - Christof Braun at AOE Conference 2018A bag full of trust - Christof Braun at AOE Conference 2018
A bag full of trust - Christof Braun at AOE Conference 2018
 
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
 
Frankfurt Airport Digitalization Case Study
Frankfurt Airport Digitalization Case StudyFrankfurt Airport Digitalization Case Study
Frankfurt Airport Digitalization Case Study
 
This is what has to change for Travel Retail to survive - Manuel Heidler, AOE
This is what has to change for Travel Retail to survive - Manuel Heidler, AOEThis is what has to change for Travel Retail to survive - Manuel Heidler, AOE
This is what has to change for Travel Retail to survive - Manuel Heidler, AOE
 
AOEconf17: Application Security
AOEconf17: Application SecurityAOEconf17: Application Security
AOEconf17: Application Security
 
AOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar Insights
 
AOEconf17: A flight through our OM³ Systems
AOEconf17: A flight through our OM³ SystemsAOEconf17: A flight through our OM³ Systems
AOEconf17: A flight through our OM³ Systems
 
AOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar Insights
 
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
 
AOEconf17: Agile scaling concepts
AOEconf17: Agile scaling conceptsAOEconf17: Agile scaling concepts
AOEconf17: Agile scaling concepts
 
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
 
AOEconf17: UI challenges in a microservice world
AOEconf17: UI challenges in a microservice worldAOEconf17: UI challenges in a microservice world
AOEconf17: UI challenges in a microservice world
 
AOEconf17: Application Security - Bastian Ike
AOEconf17: Application Security - Bastian IkeAOEconf17: Application Security - Bastian Ike
AOEconf17: Application Security - Bastian Ike
 
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
 
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan RotschAOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
 
Joern Bock: The basic concept of an agile organisation
Joern Bock: The basic concept of an agile organisationJoern Bock: The basic concept of an agile organisation
Joern Bock: The basic concept of an agile organisation
 
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
 

Último

AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 

Último (20)

AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 

Domain Driven Design

  • 2. Domain Driven Design short Refresher FLOW3 Usergroup @AOE by Daniel Pötzinger Thursday, March 1, 2012
  • 4. The problem that we want to solve Thursday, March 1, 2012
  • 6. ‣ We need to write an application that solves buissiness problems The problem Thursday, March 1, 2012
  • 7. ‣ We need to write an application that solves buissiness problems ‣ We want to use OOP The problem Thursday, March 1, 2012
  • 8. ‣ 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
  • 9. ‣ 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
  • 10. ‣ 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
  • 11. ‣ 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
  • 13. Domain Model ? Thursday, March 1, 2012
  • 14. Domain Model ? Thursday, March 1, 2012
  • 15. ‣ The domain model offers a simplified, abstract view of the problem Domain Model Domain Model Thursday, March 1, 2012
  • 16. ‣ The domain model offers a simplified, abstract view of the problem Domain Model Domain Model Domain Experts Thursday, March 1, 2012
  • 17. ‣ The domain model offers a simplified, abstract view of the problem Domain Model Domain Model Domain Experts Implementators Thursday, March 1, 2012
  • 18. ‣ The domain model offers a simplified, abstract view of the problem Domain Model Domain Model Domain Experts Implementators Thursday, March 1, 2012
  • 19. ‣ 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
  • 20. ‣ 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
  • 21. ‣ a common language should be used to describe the problem Domain Model Domain Model Domain Experts Implementators Ubiquitous Domain Language Uses terms Both understand Thursday, March 1, 2012
  • 22. ‣ a common language should be used to describe the problem Domain Model Domain Model Domain Experts Implementators Ubiquitous Domain Language Uses terms Both understand Thursday, March 1, 2012
  • 23. ‣ The Domain Model can be represented as Text, Speech or Code... Domain Model Domain Model Thursday, March 1, 2012
  • 24. ‣ 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
  • 25. ‣ 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
  • 26. ‣ 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
  • 29. •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
  • 30. UML - Class Diagram Thursday, March 1, 2012
  • 31. ‣ 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
  • 32. ‣ 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
  • 33. ‣ 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
  • 34. ‣ 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
  • 35. ‣ 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
  • 36. ‣ 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
  • 39. 1. Layered Architecture 2. Common Building Blocks and Rules 3. Find a „supple design“ 4. See the big picture Domain Driven Design - Basics Thursday, March 1, 2012
  • 40. DDD - Layered Architecture Thursday, March 1, 2012
  • 41. DDD - Layered Architecture Infrastructure / System Logging Persitence Speaking to Webservices File Formats Thursday, March 1, 2012
  • 42. DDD - Layered Architecture Domain Model Infrastructure / System Logging Persitence Speaking to Webservices File Formats Core Business Logic Thursday, March 1, 2012
  • 43. DDD - Layered Architecture Domain Model Application Layer (thin) Infrastructure / System Logging Persitence Speaking to Webservices File Formats Core Business Logic Controller / (Export/Import) Thursday, March 1, 2012
  • 44. DDD - Layered Architecture Domain Model Application Layer (thin) Infrastructure / System Logging Persitence Speaking to Webservices File Formats Core Business Logic Controller / (Export/Import)User / Other Apps Thursday, March 1, 2012
  • 45. DDD - Layered Architecture Domain Model Application Layer (thin) View Infrastructure / System Logging Persitence Speaking to Webservices File Formats Core Business Logic Controller / (Export/Import) Templates / Presentation Objects User / Other Apps Thursday, March 1, 2012
  • 49. DDD - Building Blocks Thursday, March 1, 2012
  • 50. DDD - Building Blocks Entities Thursday, March 1, 2012
  • 51. DDD - Building Blocks Entities Values Thursday, March 1, 2012
  • 52. DDD - Building Blocks Entities Values Services Thursday, March 1, 2012
  • 53. DDD - Building Blocks Entities Values Services Repository Thursday, March 1, 2012
  • 54. DDD - Building Blocks Entities Values Services Repository Factory Thursday, March 1, 2012
  • 55. DDD - Building Blocks Thursday, March 1, 2012
  • 56. DDD - Building Blocks Entities Thursday, March 1, 2012
  • 57. 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
  • 58. 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
  • 59. 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
  • 60. 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
  • 61. DDD - Building Blocks Thursday, March 1, 2012
  • 62. DDD - Building Blocks Value Thursday, March 1, 2012
  • 63. 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
  • 64. 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
  • 65. 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
  • 66. 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
  • 67. 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
  • 68. DDD - Building Blocks Thursday, March 1, 2012
  • 69. DDD - Building Blocks Service Thursday, March 1, 2012
  • 70. 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
  • 71. 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
  • 72. 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
  • 73. 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
  • 74. 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
  • 75. 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 Examples: FundTransferService / PackageRoutingService / SimCardActivationService Thursday, March 1, 2012
  • 76. DDD - Building Blocks Thursday, March 1, 2012
  • 77. DDD - Building Blocks Repository Thursday, March 1, 2012
  • 78. 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
  • 79. 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
  • 80. 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
  • 81. 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
  • 82. DDD - Building Blocks Thursday, March 1, 2012
  • 83. DDD - Building Blocks Factory Thursday, March 1, 2012
  • 84. DDD - Building Blocks Factory A factory hides logic for building objects - this is especially relevant for aggregates! Thursday, March 1, 2012
  • 85. 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
  • 86. 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
  • 87. 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
  • 88. 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
  • 90. Find a Supple Design Thursday, March 1, 2012
  • 91. Find a Supple Design vs. Thursday, March 1, 2012
  • 92. Supple Design „Speak in Domain Language“ Thursday, March 1, 2012
  • 93. ‣ 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
  • 94. ‣ 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
  • 95. Supple Design „Reduce Associations“ Thursday, March 1, 2012
  • 96. ‣ Avoid many association and use only a minimum of relations because they decrease maintainability! Supple Design „Reduce Associations“ Thursday, March 1, 2012
  • 97. ‣ 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
  • 98. ‣ 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
  • 99. ‣ 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
  • 100. ‣ 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
  • 101. ‣ 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
  • 102. ‣ 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
  • 103. Supple Design - Aggregates Thursday, March 1, 2012
  • 104. 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
  • 105. 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
  • 106. Supple Design - „Explicit constrains“ Thursday, March 1, 2012
  • 107. 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
  • 108. 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
  • 109. Supple Design - „Specifications“ Thursday, March 1, 2012
  • 110. Supple Design - „Specifications“ ‣ you can use „Specifications“ to explicit express rules Thursday, March 1, 2012
  • 111. Supple Design - „Specifications“ ‣ you can use „Specifications“ to explicit express rules examples: Thursday, March 1, 2012
  • 112. Supple Design - „Specifications“ ‣ you can use „Specifications“ to explicit express rules examples: „InventoryDelinquentSpecification“->isSatisfied() Thursday, March 1, 2012
  • 113. Supple Design - „Specifications“ ‣ you can use „Specifications“ to explicit express rules examples: „InventoryDelinquentSpecification“->isSatisfied() „GoldenCustomerSpecification“->isSatisfied($customer) Thursday, March 1, 2012
  • 114. Supple Design - Modules If your model tells a story a module is a chapter Thursday, March 1, 2012
  • 115. Supple Design - Modules Customer Order Product Customer Contract Basket Order OrderItems AbstractProduct Prepaid Thursday, March 1, 2012
  • 116. Supple Design - Modules Customer Order Product Customer Contract Basket Order OrderItems AbstractProduct Prepaid • group by meaning in the domain Thursday, March 1, 2012
  • 117. 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
  • 118. Supple Design - What else Thursday, March 1, 2012
  • 119. Supple Design - What else • Intention Revalving Interfaces Thursday, March 1, 2012
  • 120. Supple Design - What else • Intention Revalving Interfaces • standalone classes where possible Thursday, March 1, 2012
  • 121. Supple Design - What else • Intention Revalving Interfaces • standalone classes where possible • closure of operations Thursday, March 1, 2012
  • 122. Supple Design - What else • Intention Revalving Interfaces • standalone classes where possible • closure of operations • side effect free functions Thursday, March 1, 2012
  • 123. Thank you for great year! Thursday, March 1, 2012
  • 124. Thank you for great year! Thanks Thursday, March 1, 2012