• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Domain Driven Design
 

Domain Driven Design

on

  • 758 views

Mar 01, 2012

Mar 01, 2012

Short Domain Driven Design and UML Refresher

Statistics

Views

Total Views
758
Views on SlideShare
758
Embed Views
0

Actions

Likes
1
Downloads
13
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Domain Driven Design Domain Driven Design Presentation Transcript

    • Thursday, March 1, 2012
    • Domain Driven Designshort RefresherFLOW3 Usergroup @AOEby Daniel PötzingerThursday, March 1, 2012
    • Thursday, March 1, 2012
    • The problem that we want tosolveThursday, March 1, 2012
    • The problemThursday, March 1, 2012
    • ‣ We need to write an application that solvesbuissiness problemsThe problemThursday, March 1, 2012
    • ‣ We need to write an application that solvesbuissiness problems‣ We want to use OOPThe problemThursday, March 1, 2012
    • ‣ We need to write an application that solvesbuissiness problems‣ We want to use OOP‣ We need to find a good design:The problemThursday, March 1, 2012
    • ‣ We need to write an application that solvesbuissiness problems‣ We want to use OOP‣ We need to find a good design:‣ understanding the problem and the buissinessThe problemThursday, March 1, 2012
    • ‣ We need to write an application that solvesbuissiness problems‣ We want to use OOP‣ We need to find a good design:‣ understanding the problem and the buissiness‣ find understandable class-structureThe problemThursday, March 1, 2012
    • ‣ We need to write an application that solvesbuissiness 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 adjustedeasy when the buissiness changesThe problemThursday, 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 ofthe problemDomain ModelDomain ModelThursday, March 1, 2012
    • ‣ The domain model offers a simplified, abstract view ofthe problemDomain ModelDomain ModelDomain ExpertsThursday, March 1, 2012
    • ‣ The domain model offers a simplified, abstract view ofthe problemDomain ModelDomain ModelDomain ExpertsImplementatorsThursday, March 1, 2012
    • ‣ The domain model offers a simplified, abstract view ofthe problemDomain ModelDomain ModelDomain ExpertsImplementatorsThursday, March 1, 2012
    • ‣ The domain model offers a simplified, abstract view ofthe problemDomain ModelDomain ModelDomain ExpertsImplementatorsKnowledge Crunching& AnalysisThursday, March 1, 2012
    • ‣ The domain model offers a simplified, abstract view ofthe problemDomain ModelDomain ModelDomain ExpertsImplementatorsKnowledge Crunching& AnalysisThursday, March 1, 2012
    • ‣ a common language should be used to describe theproblemDomain ModelDomain ModelDomain ExpertsImplementatorsUbiquitousDomain LanguageUses termsBoth understandThursday, March 1, 2012
    • ‣ a common language should be used to describe theproblemDomain ModelDomain ModelDomain ExpertsImplementatorsUbiquitousDomain LanguageUses termsBoth understandThursday, March 1, 2012
    • ‣ The Domain Model can be represented as Text, Speechor Code...Domain ModelDomain ModelThursday, March 1, 2012
    • ‣ The Domain Model can be represented as Text, Speechor Code...Domain ModelDomain ModelTextA customer can have multiple contracts.The customer gets monthly bills to hisbilling address.Thursday, March 1, 2012
    • ‣ The Domain Model can be represented as Text, Speechor Code...Domain ModelDomain ModelTextUMLA customer can have multiple contracts.The customer gets monthly bills to hisbilling address.Thursday, March 1, 2012
    • ‣ The Domain Model can be represented as Text, Speechor Code...Domain ModelDomain ModelTextUMLA customer can have multiple contracts.The customer gets monthly bills to hisbilling address.CodeThursday, March 1, 2012
    • Thursday, March 1, 2012
    • UMLThursday, March 1, 2012
    • •UML is perfect to describe, scetch or discuss a domainmodel.UMLUMLStructural Diagrams Behavioral DiagramsClass Diagrams Object Diagrams Sequence Diagrams Use Case Diagram ......Thursday, March 1, 2012
    • UML - Class DiagramThursday, March 1, 2012
    • ‣ class diagram describes the attributes and operations ofa class and also the constraints imposed on the system.UML - Class DiagramThursday, March 1, 2012
    • ‣ class diagram describes the attributes and operations ofa class and also the constraints imposed on the system.‣ Can be directly mapped to code (OOP)UML - Class DiagramThursday, March 1, 2012
    • ‣ class diagram describes the attributes and operations ofa class and also the constraints imposed on the system.‣ Can be directly mapped to code (OOP)‣ Popular use-case is to explain conceptual importantparts => keep it simple („draw it on a paper“)UML - Class DiagramThursday, March 1, 2012
    • ‣ classes with:‣ attributes (<name>:<type> )‣ methods‣ annotations and properties‣ Associations‣ Multiplicity, roles‣ Traversal‣ Aggregation, Composition‣ Inheritance, Dependency‣ Qualifier‣ Association ClassUML - Class Diagram - ExamplesThursday, March 1, 2012
    • ‣ Depend on class diagrams‣ „Snapshot“ of instances and theire relations‣ Perfect to understand object behaviour and theirrelationship from practical perspectiveUML - Object DiagramThursday, 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 yourdesignUML - Sequence DiagramThursday, March 1, 2012
    • Thursday, March 1, 2012
    • Domain Driven DesignBasicsThursday, March 1, 2012
    • 1. Layered Architecture2. Common Building Blocks and Rules3. Find a „supple design“4. See the big pictureDomain Driven Design - BasicsThursday, March 1, 2012
    • DDD - Layered ArchitectureThursday, March 1, 2012
    • DDD - Layered ArchitectureInfrastructure / SystemLoggingPersitenceSpeaking to WebservicesFile FormatsThursday, March 1, 2012
    • DDD - Layered ArchitectureDomain ModelInfrastructure / SystemLoggingPersitenceSpeaking to WebservicesFile FormatsCore Business LogicThursday, March 1, 2012
    • DDD - Layered ArchitectureDomain ModelApplication Layer (thin)Infrastructure / SystemLoggingPersitenceSpeaking to WebservicesFile FormatsCore Business LogicController / (Export/Import)Thursday, March 1, 2012
    • DDD - Layered ArchitectureDomain ModelApplication Layer (thin)Infrastructure / SystemLoggingPersitenceSpeaking to WebservicesFile FormatsCore Business LogicController / (Export/Import)User /Other AppsThursday, March 1, 2012
    • DDD - Layered ArchitectureDomain ModelApplication Layer (thin)ViewInfrastructure / SystemLoggingPersitenceSpeaking to WebservicesFile FormatsCore Business LogicController / (Export/Import)Templates / Presentation ObjectsUser /Other AppsThursday, March 1, 2012
    • Thursday, March 1, 2012
    • Building BlocksThursday, March 1, 2012
    • Building BlocksThursday, March 1, 2012
    • DDD - Building BlocksThursday, March 1, 2012
    • DDD - Building BlocksEntitiesThursday, March 1, 2012
    • DDD - Building BlocksEntitiesValuesThursday, March 1, 2012
    • DDD - Building BlocksEntitiesValuesServicesThursday, March 1, 2012
    • DDD - Building BlocksEntitiesValuesServicesRepositoryThursday, March 1, 2012
    • DDD - Building BlocksEntitiesValuesServicesRepositoryFactoryThursday, March 1, 2012
    • DDD - Building BlocksThursday, March 1, 2012
    • DDD - Building BlocksEntitiesThursday, March 1, 2012
    • DDD - Building BlocksEntitiesObject which is primary defined by its identity (not byattributes). For example "Person", "Car", "Costumer" or"BankTransaction".Thursday, March 1, 2012
    • DDD - Building BlocksEntitiesObject which is primary defined by its identity (not byattributes). For example "Person", "Car", "Costumer" or"BankTransaction".• often has some ID valueThursday, March 1, 2012
    • DDD - Building BlocksEntitiesObject which is primary defined by its identity (not byattributes). For example "Person", "Car", "Costumer" or"BankTransaction".• often has some ID value• continuity through livecycleThursday, March 1, 2012
    • DDD - Building BlocksEntitiesObject which is primary defined by its identity (not byattributes). For example "Person", "Car", "Costumer" or"BankTransaction".• often has some ID value• continuity through livecycle• keep class definition simple / focus on live cycleThursday, March 1, 2012
    • DDD - Building BlocksThursday, March 1, 2012
    • DDD - Building BlocksValueThursday, March 1, 2012
    • DDD - Building BlocksValuedescribe the characteristic of a thing and identity is notrequired. (We care what they are - not who) Example:address, color ...Thursday, March 1, 2012
    • DDD - Building BlocksValuedescribe the characteristic of a thing and identity is notrequired. (We care what they are - not who) Example:address, color ...• should represent a whole value (conceptual thing )Thursday, March 1, 2012
    • DDD - Building BlocksValuedescribe the characteristic of a thing and identity is notrequired. (We care what they are - not who) Example:address, color ...• should represent a whole value (conceptual thing )• Often passed as argumentsThursday, March 1, 2012
    • DDD - Building BlocksValuedescribe the characteristic of a thing and identity is notrequired. (We care what they are - not who) Example:address, color ...• should represent a whole value (conceptual thing )• Often passed as arguments• No Identity gives freedomThursday, March 1, 2012
    • DDD - Building BlocksValuedescribe the characteristic of a thing and identity is notrequired. (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 BlocksThursday, March 1, 2012
    • DDD - Building BlocksServiceThursday, March 1, 2012
    • DDD - Building BlocksService“...if a single process or transformation in domain is not anatural responsibility of an entity or value => make it astandalone service with a nice interface."Thursday, March 1, 2012
    • DDD - Building BlocksService“...if a single process or transformation in domain is not anatural responsibility of an entity or value => make it astandalone service with a nice interface."• statelessThursday, March 1, 2012
    • DDD - Building BlocksService“...if a single process or transformation in domain is not anatural responsibility of an entity or value => make it astandalone service with a nice interface."• stateless• offer a useful service or action and deals with other domainobjectsThursday, March 1, 2012
    • DDD - Building BlocksService“...if a single process or transformation in domain is not anatural responsibility of an entity or value => make it astandalone service with a nice interface."• stateless• offer a useful service or action and deals with other domainobjects• defined in common domain languageThursday, March 1, 2012
    • DDD - Building BlocksService“...if a single process or transformation in domain is not anatural responsibility of an entity or value => make it astandalone service with a nice interface."• stateless• offer a useful service or action and deals with other domainobjects• defined in common domain language• do not mix with other layersThursday, March 1, 2012
    • DDD - Building BlocksService“...if a single process or transformation in domain is not anatural responsibility of an entity or value => make it astandalone service with a nice interface."• stateless• offer a useful service or action and deals with other domainobjects• defined in common domain language• do not mix with other layersExamples: FundTransferService / PackageRoutingService / SimCardActivationServiceThursday, March 1, 2012
    • DDD - Building BlocksThursday, March 1, 2012
    • DDD - Building BlocksRepositoryThursday, March 1, 2012
    • DDD - Building BlocksRepositoryFor each object where you need global access create arepository object that can provide the illusion of an inmemory collection of all objects of that type. Setupaccess through a well knows global interface.Thursday, March 1, 2012
    • DDD - Building BlocksRepositoryFor each object where you need global access create arepository object that can provide the illusion of an inmemory collection of all objects of that type. Setupaccess through a well knows global interface.• typicaly methods for add() remove() and find*()Thursday, March 1, 2012
    • DDD - Building BlocksRepositoryFor each object where you need global access create arepository object that can provide the illusion of an inmemory collection of all objects of that type. Setupaccess through a well knows global interface.• typicaly methods for add() remove() and find*()•find* methods communicate design decisions about how toaccess the dataThursday, March 1, 2012
    • DDD - Building BlocksRepositoryFor each object where you need global access create arepository object that can provide the illusion of an inmemory collection of all objects of that type. Setupaccess through a well knows global interface.• typicaly methods for add() remove() and find*()•find* methods communicate design decisions about how toaccess the data• ..reconstitution?Thursday, March 1, 2012
    • DDD - Building BlocksThursday, March 1, 2012
    • DDD - Building BlocksFactoryThursday, March 1, 2012
    • DDD - Building BlocksFactoryA factory hides logic for building objects - this isespecially relevant for aggregates!Thursday, March 1, 2012
    • DDD - Building BlocksFactoryA factory hides logic for building objects - this isespecially relevant for aggregates!• atomic (need to pass all essential parameters)Thursday, March 1, 2012
    • DDD - Building BlocksFactoryA factory hides logic for building objects - this isespecially relevant for aggregates!• atomic (need to pass all essential parameters)• not allowed to give wrong results (exceptions)Thursday, March 1, 2012
    • DDD - Building BlocksFactoryA factory hides logic for building objects - this isespecially relevant for aggregates!• atomic (need to pass all essential parameters)• not allowed to give wrong results (exceptions)• entity vs. value factoriesThursday, March 1, 2012
    • DDD - Building BlocksFactoryA factory hides logic for building objects - this isespecially 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 DesignThursday, March 1, 2012
    • Find a Supple Designvs.Thursday, March 1, 2012
    • Supple Design „Speak in Domain Language“Thursday, March 1, 2012
    • ‣ Try to explain scenarios loud with the use of the modeland the ubiquitous languageSupple Design „Speak in Domain Language“Thursday, March 1, 2012
    • ‣ Try to explain scenarios loud with the use of the modeland the ubiquitous language‣ Try to explain scenarios more simple/better (find easierways 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 ofrelations because they decrease maintainability!Supple Design „Reduce Associations“Thursday, March 1, 2012
    • ‣ Avoid many association and use only a minimum ofrelations because they decrease maintainability!‣ traversal instead of bidirectionalSupple Design „Reduce Associations“Thursday, March 1, 2012
    • ‣ Avoid many association and use only a minimum ofrelations 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 ofrelations 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 ofrelations because they decrease maintainability!‣ traversal instead of bidirectional‣ adding qualifier to reduce multiplicity (class missing?)‣ eliminate non essential assoc.‣ find and use aggregatesSupple Design „Reduce Associations“Thursday, March 1, 2012
    • ‣ Avoid many association and use only a minimum ofrelations 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 RefactoringSupple Design „Reduce Associations“Thursday, March 1, 2012
    • ‣ Avoid many association and use only a minimum ofrelations 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 - AggregatesThursday, 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 nameyou can talk about and the code is moreunderstandableThursday, March 1, 2012
    • Supple Design - „Explicit constrains“‣ name and make constrains explicit.That gives it a nameyou can talk about and the code is moreunderstandableBucket exampleThursday, March 1, 2012
    • Supple Design - „Specifications“Thursday, March 1, 2012
    • Supple Design - „Specifications“‣ you can use „Specifications“ to explicit express rulesThursday, March 1, 2012
    • Supple Design - „Specifications“‣ you can use „Specifications“ to explicit express rulesexamples:Thursday, March 1, 2012
    • Supple Design - „Specifications“‣ you can use „Specifications“ to explicit express rulesexamples:„InventoryDelinquentSpecification“->isSatisfied()Thursday, March 1, 2012
    • Supple Design - „Specifications“‣ you can use „Specifications“ to explicit express rulesexamples:„InventoryDelinquentSpecification“->isSatisfied()„GoldenCustomerSpecification“->isSatisfied($customer)Thursday, March 1, 2012
    • Supple Design - ModulesIf your model tells a story a module is a chapterThursday, March 1, 2012
    • Supple Design - ModulesCustomer OrderProductCustomer Contract Basket OrderOrderItemsAbstractProductPrepaidThursday, March 1, 2012
    • Supple Design - ModulesCustomer OrderProductCustomer Contract Basket OrderOrderItemsAbstractProductPrepaid• group by meaning in the domainThursday, March 1, 2012
    • Supple Design - ModulesCustomer OrderProductCustomer Contract Basket OrderOrderItemsAbstractProductPrepaid• group by meaning in the domain• loose coupling between modulesThursday, March 1, 2012
    • Supple Design - What elseThursday, March 1, 2012
    • Supple Design - What else• Intention Revalving InterfacesThursday, March 1, 2012
    • Supple Design - What else• Intention Revalving Interfaces• standalone classes where possibleThursday, March 1, 2012
    • Supple Design - What else• Intention Revalving Interfaces• standalone classes where possible• closure of operationsThursday, March 1, 2012
    • Supple Design - What else• Intention Revalving Interfaces• standalone classes where possible• closure of operations• side effect free functionsThursday, March 1, 2012
    • Thank you for great year!Thursday, March 1, 2012
    • Thank you for great year!ThanksThursday, March 1, 2012