Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction au DDD sous l’angle stratégique — hyf mai 2020

Introduction au DDD sous l’angle stratégique — hyf mai 2020

Le DDD, est une approche de la conception logicielle dirigée par le domaine, fondée sur deux principes :

- les conceptions complexes doivent être basées sur un modèle
- l’accent doit être sur le domaine et la logique associée

Dans cette présentation nous nous intéressons à la partie essentielle, mais souvent oubliée du DDD : les patterns stratégiques.

Arnaud LEMAIRE

May 19, 2020
Tweet

More Decks by Arnaud LEMAIRE

Other Decks in Programming

Transcript

  1. Let’s start a new project ! We just receive the

    customer’s requirements, we still need to clarify a few things. But you can start the preliminary design phase ! Let's do a sprint zero !
  2. SQL or NoSQL ? Java or C# ? Spring Boot

    or Quarkus ? PostgreSQL or MySQL ? Kafka or Redis ? Microservices or Monolith ? Kubernetes or Nomad ? Angular or React ?
  3. What are you working on ? There are still some

    uncertainties, but we’re gonna use kafka …
  4. Java or C# ? PostgreSQL or MySQL ? Kafka or

    Redis ? Microservices or Monolith ? Kubernetes or Nomad ? SQL or NoSQL ? Spring Boot or Quarkus ? These issues address only the solution
  5. Java or C# ? PostgreSQL or MySQL ? Kafka or

    Redis ? Microservices or Monolith ? Kubernetes or Nomad ? SQL or NoSQL ? Spring Boot or Quarkus ? These issues address only the solution But not the problem What should we do ?
  6. These issues address only the solution But not the problem

    What should we do ? How are we going to do it ?
  7. These issues address only the solution And that's why we

    keep being treated as technical specialists
  8. These issues address only the solution It is an important

    discussion to have But not the problem But only after we've figured out what to do
  9. Let’s start a new project ! We just receive the

    customer’s requirements, we still need to clarify a few things. But you can start the preliminary design phase ! Let's do a sprint zero !
  10. I heard about « Domain Driven Design », maybe we

    should use it ! Yeah, that's a great idea.
  11. What are you working on ? There are still some

    uncertainties, but we’re gonna use an event-driven hexagonal architecture …
  12. These issues still address only the solution Aggregate Repository Bounded

    Context as Microservices Domain Service CQRS Entity Value Object Hexagonal Architecture Event Driven
  13. These issues still address only the solution And that's why

    we keep being treated as technical specialists
  14. Domains & Subdomains Business Domain discovery THE Software Authoring &

    Publishing Printing & Supply Chain Customer Care Retail Store You need to acknowledge the fact that you have several domains
  15. Retail Store Inventory Customer Care Shipping Only one VP should

    be angry at a time Retail Store Inventory Customer Care Shipping Authoring & Publishing Printing & Supply Chain Customer Care Retail Store Domains & Subdomains Business Domain discovery
  16. Retail Store Inventory Customer Care Shipping These are neither Bounded

    Contexts nor Microservices Authoring & Publishing Printing & Supply Chain Customer Care Retail Store Domains & Subdomains Business Domain discovery
  17. Retail Store Inventory Customer Care Shipping These are your domains

    Authoring & Publishing Printing & Supply Chain Customer Care Retail Store Domains & Subdomains Business Domain discovery
  18. Your domains contain domains Domains & Subdomains Business Domain discovery

    Online Retail Store Payment processor Catalogue Invoicing
  19. Domain Mapping Business Domain Classification Authoring Plateform Publishing & Printing

    Inventory Management Payment Processor Catalogue Invoicing Shipping Order Processing Proofreading
  20. Supporting Subdomain Generic Subdomain Core (sub)Domain Key differentiator Domains &

    Subdomains Business Domain Classification Essential to the organization’s success Required for the organization’s success Critical to the organization’s success
  21. Domains & Subdomains Business Domain Classification Authoring Plateform Inventory Management

    Shipping Payment Processor Catalogue Invoicing Order Processing Publishing & Printing Proofreading
  22. Domains & Subdomains Business Domain Classification Authoring Plateform Inventory Management

    Payment Processor Catalogue Invoicing Each business context is specific Shipping Order Processing Publishing & Printing Proofreading
  23. Authoring Plateform Domains’ Connexion Reveal Business Relationships Inventory Management Shipping

    Catalogue Invoicing Order Processing Payment Processor It can highlight significant sub-domain Publishing & Printing Proofreading
  24. From Problem to Solution Business Domain & Architecture alignment Authoring

    Plateform Publishing & Printing Inventory Management Shipping Payment Processor Catalogue Invoicing Order Processing problem Proofreading
  25. From Problem to Solution Business Domain & Architecture alignment Authoring

    Plateform Publishing & Printing Inventory Management Shipping Payment Processor Catalogue Invoicing Order Processing problem solution Payment processor Invoicing Order Processing Shipping Authoring Plateforme Inventory Management Catalogue Publishing Proofreading Proofreading Inventory E-commerce platform Authoring Publishing
  26. Domains & Subdomains Development Strategy Supporting Subdomain In-House development with

    external support if possible Generic Subdomain Outsourcing is an option Core (sub)Domain In-House development with Your best teams Key differentiator
  27. Domains & Subdomains Development Strategy Supporting Subdomain Customized Off The

    Shelf Software is an option Generic Subdomain Try to find Off The Shelf solution Cost saving opportunities Core (sub)Domain Custom-made software High Cost & Quality Key differentiator
  28. From Problem to Solution Business Domain & Architecture alignment Authoring

    Plateform Publishing & Printing Inventory Management Shipping Payment Processor Catalogue Invoicing Order Processing problem solution Payment processor Invoicing Order Processing Shipping Authoring Plateforme Inventory Management Catalogue Publishing Proofreading Proofreading Inventory E-commerce platform Authoring Publishing
  29. From Problem to Solution Business Domain & Architecture alignment Authoring

    Plateform Publishing & Printing Inventory Management Shipping Payment Processor Catalogue Invoicing Order Processing problem solution Proofreading Inventory E-commerce platform Authoring Authoring Plateforme Publishing Catalogue Publishing Proofreading
  30. From Problem to Solution Business Domain & Architecture alignment Inventory

    E-commerce platform Authoring Authoring Plateforme Publishing Catalogue Publishing Proofreading These are your bounded contexts
  31. P Authoring Publishing E-commerce Stripe ShipMonk Shopify Context Mapping Relationship

    Hierarchy These are your bounded contexts OHS OHS ACL OHS C/S
  32. Authoring Publishing E-commerce Specific Architecture style You don’t need one

    architectural style Beware of the CRUD ES CQRS CRUD ? Stripe ShipMonk Shopify
  33. Stripe Still no microservices Bounded Context ≠ Deployment units ShipMonk

    Authoring Publishing E-commerce Shopify Deployment Unit
  34. Deployment Unit Stripe Still no microservices Bounded Context ≠ Deployment

    units ShipMonk Authoring Publishing E-commerce Shopify Deployment Unit
  35. Domains are not immutable Understanding is a never-ending process Stripe

    ShipMonk Authoring Publishing E-commerce Shopify Printing
  36. Semantic Boundaries Between BC meaning are different Authoring Publishing Book

    Chapter Chapter They are not the same book What happens if the author revises his book?
  37. Semantic Boundaries Between BC meaning are different Chapter This is

    why you must start by understand strategically your domain Author Book Reviews Release Catalogue
  38. Semantic Boundaries Between BC meaning are different Authoring Publishing Book

    Chapter Chapter Book Chapter Chapter Inside a Bounded Context, Don’t Repeat Yourself Between Bounded Context, Write Everything Twice
  39. Don’t cross them Between BC meaning are different Authoring Publishing

    Author Reviews Author Book Book Release Never create relationships between entities from two BC
  40. Don’t cross them Between BC meaning are different Authoring Publishing

    Book Book Release Author Author Reviews This is exactly the same
  41. Don’t cross them Between BC meaning are different Authoring Publishing

    Book Book Release Author Author Reviews API API
  42. Same for Events Between BC meaning are different Authoring Publishing

    This is exactly the same Event Bus Book Book Release Author Author Reviews
  43. Same for Events Between BC meaning are different Authoring Publishing

    Event Bus Book Book Release Author Author Reviews Translator Translator
  44. Transactional Boundaries Protect your integrity Authoring Book Chapter Chapter Chapter

    Statistics Inside your bounded Context live Entities They are grouped in Aggregates
  45. Transactional Boundaries Protect your integrity Book Chapter Chapter Chapter Statistics

    They are retrieved and persisted as a whole Inside an aggregate, Entities share the same lifecycle
  46. Transactional Boundaries Protect your integrity Book Chapter Chapter Chapter Statistics

    Who ensures the aggregate integrity All interactions are done through the Aggregate Root Write a new chapter
  47. Transactional Boundaries Protect your integrity Book Chapter Chapter Chapter Statistics

    But don’t put to much in it Author What happens if we delete the book ? They must share the same lifecycle
  48. Designing Boundaries Protect your domain Printing Team We need printing

    margin Book Chapter Chapter Chapter Release We need the colorimetric profile Printing margin Colorimetric profile API Publishing Team
  49. Designing Boundaries Protect your domain API We need printing margin

    Book Chapter Chapter Chapter Release We need the colorimetric profile Printing margin Colorimetric profile Domain Leakage Publishing Team Printing Team
  50. Designing Boundaries Protect your domain Publishing Team Printing Team Publishing

    API We need printing margin Book We need the colorimetric profile Printing margin Colorimetric profile Printing API We discovered the need for an ACL
  51. A A A not « just » a glossary Ubiquitous

    language Stakeholders & Team Alignement Dev Domain Expert Dev
  52. Ubiquitous language Each BC has its own Authoring Publishing A

    A A A It is a common cause of miscommunication
  53. Know your users They might not be who you think

    they are Dev Domain Expert Product Owner Customer User
  54. Know your users They might not be who you think

    they are Dev Domain Expert Product Owner Customer User He has the last word regarding domain implementation
  55. Know your users They might not be who you think

    they are Dev Domain Expert Product Owner Customer User Prioritize development & formalize users’ feedback
  56. Know your users They might not be who you think

    they are Dev Domain Expert Product Owner Customer User Power of Life and Death over the project
  57. Know your users They might not be who you think

    they are Dev Domain Expert Product Owner Customer User Too often forgotten
  58. Know your users They might not be who you think

    they are Dev Domain Expert Product Owner Customer User Maybe you could spend a day per month working with them ?
  59. Know your users They might not be who you think

    they are Dev Domain Expert Product Owner Customer User They design the software specification
  60. Know your users They might not be who you think

    they are Dev Domain Expert Product Owner Customer User What he understood goes into production
  61. “A loosely coupled software architecture and org structure to match”

    is a key predictor of: • Continuous Delivery Performance • Ability to scale organization and increase performance linearly This is what DDD is All About ! — Michael Plöd (@bitboss)