SlideShare une entreprise Scribd logo
1  sur  124
Télécharger pour lire hors ligne
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
The problem

                 ‣        We need to write an application that solves
                          buissiness problems




Thursday, March 1, 2012
The problem

                 ‣        We need to write an application that solves
                          buissiness problems
                 ‣        We want to use OOP




Thursday, March 1, 2012
The problem

                 ‣        We need to write an application that solves
                          buissiness problems
                 ‣        We want to use OOP
                 ‣        We need to find a good design:




Thursday, March 1, 2012
The problem

                 ‣        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




Thursday, March 1, 2012
The problem

                 ‣        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




Thursday, March 1, 2012
The problem

                 ‣        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




Thursday, March 1, 2012
Thursday, March 1, 2012
Domain Model ?



Thursday, March 1, 2012
Domain Model ?



Thursday, March 1, 2012
Domain Model

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




                                                                         Domain Model




Thursday, March 1, 2012
Domain Model

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




                           Domain Experts

                                                                         Domain Model




Thursday, March 1, 2012
Domain Model

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




                           Domain Experts

                                                                         Domain Model


                           Implementators


Thursday, March 1, 2012
Domain Model

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




                           Domain Experts

                                                                         Domain Model


                           Implementators


Thursday, March 1, 2012
Domain Model

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




                           Domain Experts

                                            Knowledge Crunching          Domain Model
                                                & Analysis


                           Implementators


Thursday, March 1, 2012
Domain Model

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




                           Domain Experts

                                            Knowledge Crunching          Domain Model
                                                & Analysis


                           Implementators


Thursday, March 1, 2012
Domain Model

                 ‣        a common language should be used to describe the
                          problem

                                                                Ubiquitous
                                                              Domain Language

                                                                                Uses terms
                           Domain Experts
                                            Both understand



                                                                                  Domain Model
                           Implementators


Thursday, March 1, 2012
Domain Model

                 ‣        a common language should be used to describe the
                          problem

                                                                Ubiquitous
                                                              Domain Language

                                                                                Uses terms
                           Domain Experts
                                            Both understand



                                                                                  Domain Model
                           Implementators


Thursday, March 1, 2012
Domain Model

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




                          Domain Model




Thursday, March 1, 2012
Domain Model

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

                                                               A customer can have multiple contracts.
                                                               The customer gets monthly bills to his
                                                     Text
                                                                          billing address.
                          Domain Model




Thursday, March 1, 2012
Domain Model

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

                                                               A customer can have multiple contracts.
                                                               The customer gets monthly bills to his
                                                     Text
                                                                          billing address.
                          Domain Model
                                                     UML




Thursday, March 1, 2012
Domain Model

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

                                                               A customer can have multiple contracts.
                                                               The customer gets monthly bills to his
                                                     Text
                                                                          billing address.
                          Domain Model
                                                     UML


                                                     Code



Thursday, March 1, 2012
Thursday, March 1, 2012
UML



Thursday, March 1, 2012
UML

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

                                          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
UML - Class Diagram

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




Thursday, March 1, 2012
UML - Class Diagram

                 ‣        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)




Thursday, March 1, 2012
UML - Class Diagram

                 ‣        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“)




Thursday, March 1, 2012
UML - Class Diagram - Examples

                 ‣         classes with:
                           ‣ attributes (<name>:<type> )
                           ‣ methods
                           ‣ annotations and properties
                 ‣        Associations
                           ‣ Multiplicity, roles
                           ‣ Traversal
                           ‣ Aggregation, Composition
                 ‣        Inheritance, Dependency
                 ‣        Qualifier
                 ‣        Association Class
Thursday, March 1, 2012
UML - Object Diagram

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




Thursday, March 1, 2012
UML - Sequence Diagram

                 ‣         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




Thursday, March 1, 2012
Thursday, March 1, 2012
Domain Driven Design
                                Basics




Thursday, March 1, 2012
Domain Driven Design - Basics



                          1. Layered Architecture
                          2. Common Building Blocks and Rules
                          3. Find a „supple design“
                          4. See the big picture



Thursday, March 1, 2012
DDD - Layered Architecture




Thursday, March 1, 2012
DDD - Layered Architecture




                                                                Logging
                                                              Persitence
                             Infrastructure / System   Speaking to Webservices
                                                             File Formats



Thursday, March 1, 2012
DDD - Layered Architecture




                                 Domain Model             Core Business Logic



                                                                Logging
                                                              Persitence
                             Infrastructure / System   Speaking to Webservices
                                                             File Formats



Thursday, March 1, 2012
DDD - Layered Architecture



                              Application Layer (thin)   Controller / (Export/Import)



                                 Domain Model               Core Business Logic



                                                                  Logging
                                                                Persitence
                             Infrastructure / System     Speaking to Webservices
                                                               File Formats



Thursday, March 1, 2012
DDD - Layered Architecture



           User /             Application Layer (thin)   Controller / (Export/Import)
         Other Apps

                                 Domain Model               Core Business Logic



                                                                  Logging
                                                                Persitence
                             Infrastructure / System     Speaking to Webservices
                                                               File Formats



Thursday, March 1, 2012
DDD - Layered Architecture

                                                         Templates / Presentation Objects
                                      View
           User /             Application Layer (thin)    Controller / (Export/Import)
         Other Apps

                                 Domain Model                 Core Business Logic



                                                                    Logging
                                                                  Persitence
                             Infrastructure / System       Speaking to Webservices
                                                                 File Formats



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      Repository


                          Values

                          Services




Thursday, March 1, 2012
DDD - Building Blocks


                          Entities      Repository


                          Values         Factory


                          Services




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
Supple Design „Speak in Domain Language“


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




Thursday, March 1, 2012
Supple Design „Speak in Domain Language“


                  ‣       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.




Thursday, March 1, 2012
Supple Design „Reduce Associations“




Thursday, March 1, 2012
Supple Design „Reduce Associations“


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




Thursday, March 1, 2012
Supple Design „Reduce Associations“


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




Thursday, March 1, 2012
Supple Design „Reduce Associations“


                 ‣        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?)




Thursday, March 1, 2012
Supple Design „Reduce Associations“


                 ‣        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.




Thursday, March 1, 2012
Supple Design „Reduce Associations“


                 ‣        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




Thursday, March 1, 2012
Supple Design „Reduce Associations“


                 ‣        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


Thursday, March 1, 2012
Supple Design „Reduce Associations“


                 ‣        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 ...
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
                            Customer      Contract               Basket   Order


                                                                          OrderItems




                          Product
                                              AbstractProduct



                                    Prepaid




Thursday, March 1, 2012
Supple Design - Modules

                          Customer                                     Order
                            Customer      Contract                      Basket     Order


                                                                                   OrderItems




                          Product
                                              AbstractProduct
                                                                • group by meaning in the domain

                                    Prepaid




Thursday, March 1, 2012
Supple Design - Modules

                          Customer                                     Order
                            Customer      Contract                      Basket     Order


                                                                                   OrderItems




                          Product
                                              AbstractProduct
                                                                • group by meaning in the domain
                                                                • loose coupling between modules
                                    Prepaid




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

Contenu connexe

Tendances

Tendances (20)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Applying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsApplying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain Models
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated
 
Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven Design
 
Anthos Application Modernization Platform
Anthos Application Modernization PlatformAnthos Application Modernization Platform
Anthos Application Modernization Platform
 
Domain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and MicroservicesDomain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and Microservices
 
Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) Distilled
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design Quickly
 
Brownfield Domain Driven Design
Brownfield Domain Driven DesignBrownfield Domain Driven Design
Brownfield Domain Driven Design
 
Practical Software Architecture DDD
Practical Software Architecture DDDPractical Software Architecture DDD
Practical Software Architecture DDD
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
Refactoring for Domain Driven Design
Refactoring for Domain Driven DesignRefactoring for Domain Driven Design
Refactoring for Domain Driven Design
 
CQRS: Command/Query Responsibility Segregation
CQRS: Command/Query Responsibility SegregationCQRS: Command/Query Responsibility Segregation
CQRS: Command/Query Responsibility Segregation
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 

Similaire à Domain Driven Design

Software engineering principles in system software design
Software engineering principles in system software designSoftware engineering principles in system software design
Software engineering principles in system software design
Tech_MX
 
Seminar: Embedding Optimization in Applications with MPL OptiMax - April 2012
Seminar: Embedding Optimization in Applications with MPL OptiMax - April 2012Seminar: Embedding Optimization in Applications with MPL OptiMax - April 2012
Seminar: Embedding Optimization in Applications with MPL OptiMax - April 2012
Bjarni Kristjánsson
 
Multilingual solutions florian loretan
Multilingual solutions florian loretanMultilingual solutions florian loretan
Multilingual solutions florian loretan
drupalconf
 
Waza keynote: Idea to Delivery
Waza keynote: Idea to DeliveryWaza keynote: Idea to Delivery
Waza keynote: Idea to Delivery
Adam Wiggins
 
Consulting toolkit analogies
Consulting toolkit   analogiesConsulting toolkit   analogies
Consulting toolkit analogies
chrisdoran
 
Dispelling the mystery around resource planning revc
Dispelling the mystery around resource planning revcDispelling the mystery around resource planning revc
Dispelling the mystery around resource planning revc
kdelcol
 

Similaire à Domain Driven Design (20)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Ooad
OoadOoad
Ooad
 
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
 
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
 
Software engineering principles in system software design
Software engineering principles in system software designSoftware engineering principles in system software design
Software engineering principles in system software design
 
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)
 
Seminar: Embedding Optimization in Applications with MPL OptiMax - April 2012
Seminar: Embedding Optimization in Applications with MPL OptiMax - April 2012Seminar: Embedding Optimization in Applications with MPL OptiMax - April 2012
Seminar: Embedding Optimization in Applications with MPL OptiMax - April 2012
 
Developing with Phonegap - Adobe Refresh 2012
Developing with Phonegap - Adobe Refresh 2012Developing with Phonegap - Adobe Refresh 2012
Developing with Phonegap - Adobe Refresh 2012
 
Best Practices for (Enterprise) OSGi applications - Tim Ward
Best Practices for (Enterprise) OSGi applications - Tim WardBest Practices for (Enterprise) OSGi applications - Tim Ward
Best Practices for (Enterprise) OSGi applications - Tim Ward
 
BDD by example
BDD by exampleBDD by example
BDD by example
 
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
 
Architecting for failure
Architecting for failureArchitecting for failure
Architecting for failure
 
Code & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven DesignCode & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven Design
 
Multilingual solutions florian loretan
Multilingual solutions florian loretanMultilingual solutions florian loretan
Multilingual solutions florian loretan
 
05 ai uml_illik_students_part_1_eng
05 ai uml_illik_students_part_1_eng05 ai uml_illik_students_part_1_eng
05 ai uml_illik_students_part_1_eng
 
Waza keynote: Idea to Delivery
Waza keynote: Idea to DeliveryWaza keynote: Idea to Delivery
Waza keynote: Idea to Delivery
 
Chapter 6 the modeling activity
Chapter 6   the modeling activityChapter 6   the modeling activity
Chapter 6 the modeling activity
 
Consulting toolkit analogies
Consulting toolkit   analogiesConsulting toolkit   analogies
Consulting toolkit analogies
 
Harnessing the Power of the Social Media Stream for Education and Training
Harnessing the Power of the Social Media Stream for Education and TrainingHarnessing the Power of the Social Media Stream for Education and Training
Harnessing the Power of the Social Media Stream for Education and Training
 
Dispelling the mystery around resource planning revc
Dispelling the mystery around resource planning revcDispelling the mystery around resource planning revc
Dispelling the mystery around resource planning revc
 

Plus de AOE

Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
AOE
 
Searchperience Indexierungspipeline
Searchperience   IndexierungspipelineSearchperience   Indexierungspipeline
Searchperience Indexierungspipeline
AOE
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
AOE
 
Selenium 2 for PHP(Unit)
Selenium 2 for PHP(Unit)Selenium 2 for PHP(Unit)
Selenium 2 for PHP(Unit)
AOE
 
T3DD12 Caching with Varnish
T3DD12 Caching with VarnishT3DD12 Caching with Varnish
T3DD12 Caching with Varnish
AOE
 
T3DD12 community extension
T3DD12  community extensionT3DD12  community extension
T3DD12 community extension
AOE
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
AOE
 

Plus de AOE (20)

Multithreaded XML Import (San Francisco Magento Meetup)
Multithreaded XML Import (San Francisco Magento Meetup)Multithreaded XML Import (San Francisco Magento Meetup)
Multithreaded XML Import (San Francisco Magento Meetup)
 
rock-solid TYPO3 development with continuous integration and deployment
rock-solid TYPO3 development with continuous integration and deploymentrock-solid TYPO3 development with continuous integration and deployment
rock-solid TYPO3 development with continuous integration and deployment
 
Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013
Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013
Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013
 
Continuous Quality Assurance using Selenium WebDriver
Continuous Quality Assurance using Selenium WebDriverContinuous Quality Assurance using Selenium WebDriver
Continuous Quality Assurance using Selenium WebDriver
 
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
 
SONY on TYPO3 - Rapid Global CMS Deployment
SONY on TYPO3 - Rapid Global CMS DeploymentSONY on TYPO3 - Rapid Global CMS Deployment
SONY on TYPO3 - Rapid Global CMS Deployment
 
The typo3.org Relaunch Project
The typo3.org Relaunch ProjectThe typo3.org Relaunch Project
The typo3.org Relaunch Project
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling  am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
Searchperience Indexierungspipeline
Searchperience   IndexierungspipelineSearchperience   Indexierungspipeline
Searchperience Indexierungspipeline
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
 
Selenium 2 for PHP(Unit)
Selenium 2 for PHP(Unit)Selenium 2 for PHP(Unit)
Selenium 2 for PHP(Unit)
 
Angrybirds Magento Cloud Deployment
Angrybirds Magento Cloud DeploymentAngrybirds Magento Cloud Deployment
Angrybirds Magento Cloud Deployment
 
T3DD12 Caching with Varnish
T3DD12 Caching with VarnishT3DD12 Caching with Varnish
T3DD12 Caching with Varnish
 
T3DD12 community extension
T3DD12  community extensionT3DD12  community extension
T3DD12 community extension
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
 
Debugging, Monitoring and Profiling in TYPO3
Debugging, Monitoring and Profiling in TYPO3Debugging, Monitoring and Profiling in TYPO3
Debugging, Monitoring and Profiling in TYPO3
 
Panasonic search
Panasonic searchPanasonic search
Panasonic search
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Open Source CMS TYPO3 at Cisco WebEx
Open Source CMS TYPO3 at Cisco WebExOpen Source CMS TYPO3 at Cisco WebEx
Open Source CMS TYPO3 at Cisco WebEx
 

Dernier

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
panagenda
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Dernier (20)

Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
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
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
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
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
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
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

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. The problem ‣ We need to write an application that solves buissiness problems Thursday, March 1, 2012
  • 7. The problem ‣ We need to write an application that solves buissiness problems ‣ We want to use OOP Thursday, March 1, 2012
  • 8. The problem ‣ We need to write an application that solves buissiness problems ‣ We want to use OOP ‣ We need to find a good design: Thursday, March 1, 2012
  • 9. The problem ‣ 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 Thursday, March 1, 2012
  • 10. The problem ‣ 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 Thursday, March 1, 2012
  • 11. The problem ‣ 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 Thursday, March 1, 2012
  • 13. Domain Model ? Thursday, March 1, 2012
  • 14. Domain Model ? Thursday, March 1, 2012
  • 15. Domain Model ‣ The domain model offers a simplified, abstract view of the problem Domain Model Thursday, March 1, 2012
  • 16. Domain Model ‣ The domain model offers a simplified, abstract view of the problem Domain Experts Domain Model Thursday, March 1, 2012
  • 17. Domain Model ‣ The domain model offers a simplified, abstract view of the problem Domain Experts Domain Model Implementators Thursday, March 1, 2012
  • 18. Domain Model ‣ The domain model offers a simplified, abstract view of the problem Domain Experts Domain Model Implementators Thursday, March 1, 2012
  • 19. Domain Model ‣ The domain model offers a simplified, abstract view of the problem Domain Experts Knowledge Crunching Domain Model & Analysis Implementators Thursday, March 1, 2012
  • 20. Domain Model ‣ The domain model offers a simplified, abstract view of the problem Domain Experts Knowledge Crunching Domain Model & Analysis Implementators Thursday, March 1, 2012
  • 21. Domain Model ‣ a common language should be used to describe the problem Ubiquitous Domain Language Uses terms Domain Experts Both understand Domain Model Implementators Thursday, March 1, 2012
  • 22. Domain Model ‣ a common language should be used to describe the problem Ubiquitous Domain Language Uses terms Domain Experts Both understand Domain Model Implementators Thursday, March 1, 2012
  • 23. Domain Model ‣ The Domain Model can be represented as Text, Speech or Code... Domain Model Thursday, March 1, 2012
  • 24. Domain Model ‣ The Domain Model can be represented as Text, Speech or Code... A customer can have multiple contracts. The customer gets monthly bills to his Text billing address. Domain Model Thursday, March 1, 2012
  • 25. Domain Model ‣ The Domain Model can be represented as Text, Speech or Code... A customer can have multiple contracts. The customer gets monthly bills to his Text billing address. Domain Model UML Thursday, March 1, 2012
  • 26. Domain Model ‣ The Domain Model can be represented as Text, Speech or Code... A customer can have multiple contracts. The customer gets monthly bills to his Text billing address. Domain Model UML Code Thursday, March 1, 2012
  • 29. UML •UML is perfect to describe, scetch or discuss a domain model. 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. UML - Class Diagram ‣ class diagram describes the attributes and operations of a class and also the constraints imposed on the system. Thursday, March 1, 2012
  • 32. UML - Class Diagram ‣ 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) Thursday, March 1, 2012
  • 33. UML - Class Diagram ‣ 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“) Thursday, March 1, 2012
  • 34. UML - Class Diagram - Examples ‣ classes with: ‣ attributes (<name>:<type> ) ‣ methods ‣ annotations and properties ‣ Associations ‣ Multiplicity, roles ‣ Traversal ‣ Aggregation, Composition ‣ Inheritance, Dependency ‣ Qualifier ‣ Association Class Thursday, March 1, 2012
  • 35. UML - Object Diagram ‣ Depend on class diagrams ‣ „Snapshot“ of instances and theire relations ‣ Perfect to understand object behaviour and their relationship from practical perspective Thursday, March 1, 2012
  • 36. UML - Sequence Diagram ‣ 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 Thursday, March 1, 2012
  • 38. Domain Driven Design Basics Thursday, March 1, 2012
  • 39. Domain Driven Design - Basics 1. Layered Architecture 2. Common Building Blocks and Rules 3. Find a „supple design“ 4. See the big picture Thursday, March 1, 2012
  • 40. DDD - Layered Architecture Thursday, March 1, 2012
  • 41. DDD - Layered Architecture Logging Persitence Infrastructure / System Speaking to Webservices File Formats Thursday, March 1, 2012
  • 42. DDD - Layered Architecture Domain Model Core Business Logic Logging Persitence Infrastructure / System Speaking to Webservices File Formats Thursday, March 1, 2012
  • 43. DDD - Layered Architecture Application Layer (thin) Controller / (Export/Import) Domain Model Core Business Logic Logging Persitence Infrastructure / System Speaking to Webservices File Formats Thursday, March 1, 2012
  • 44. DDD - Layered Architecture User / Application Layer (thin) Controller / (Export/Import) Other Apps Domain Model Core Business Logic Logging Persitence Infrastructure / System Speaking to Webservices File Formats Thursday, March 1, 2012
  • 45. DDD - Layered Architecture Templates / Presentation Objects View User / Application Layer (thin) Controller / (Export/Import) Other Apps Domain Model Core Business Logic Logging Persitence Infrastructure / System Speaking to Webservices File Formats 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 Repository Values Services Thursday, March 1, 2012
  • 54. DDD - Building Blocks Entities Repository Values Factory Services 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. Supple Design „Speak in Domain Language“ ‣ Try to explain scenarios loud with the use of the model and the ubiquitous language Thursday, March 1, 2012
  • 94. Supple Design „Speak in Domain Language“ ‣ 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. Thursday, March 1, 2012
  • 95. Supple Design „Reduce Associations“ Thursday, March 1, 2012
  • 96. Supple Design „Reduce Associations“ ‣ Avoid many association and use only a minimum of relations because they decrease maintainability! Thursday, March 1, 2012
  • 97. Supple Design „Reduce Associations“ ‣ Avoid many association and use only a minimum of relations because they decrease maintainability! ‣ traversal instead of bidirectional Thursday, March 1, 2012
  • 98. Supple Design „Reduce Associations“ ‣ 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?) Thursday, March 1, 2012
  • 99. Supple Design „Reduce Associations“ ‣ 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. Thursday, March 1, 2012
  • 100. Supple Design „Reduce Associations“ ‣ 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 Thursday, March 1, 2012
  • 101. Supple Design „Reduce Associations“ ‣ 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 Thursday, March 1, 2012
  • 102. Supple Design „Reduce Associations“ ‣ 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 ... 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 Customer Contract Basket Order OrderItems Product AbstractProduct Prepaid Thursday, March 1, 2012
  • 116. Supple Design - Modules Customer Order Customer Contract Basket Order OrderItems Product AbstractProduct • group by meaning in the domain Prepaid Thursday, March 1, 2012
  • 117. Supple Design - Modules Customer Order Customer Contract Basket Order OrderItems Product AbstractProduct • group by meaning in the domain • loose coupling between modules Prepaid 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