SlideShare une entreprise Scribd logo
1  sur  21
DOMAIN-DRIVEN
DESIGN
Jean-Loup Monnier
Rennes
DOMAIN-DRIVEN DESIGN
C’est quoi ?
DOMAIN-DRIVEN DESIGN
Pas un Framework
Pas une technique de code
C’est une philosophie et une boite à outils
Le but de DDD c’est
d'éviter ça !
DOMAIN-DRIVEN DESIGN
« Ce que le client voulait vraiment » : http://www.projectcartoon.com/cartoon/2
« The blue book »
« Tackling Complexity in the
Heart of Software »
Ecrit par Eric Evans en
2003
DOMAIN-DRIVEN DESIGN – LES ORIGINES
02
DOMAIN-DRIVEN DESIGN
Comment l’appliquer
La Stratégie définit
l’objectif
Où on va !
La Tactique, c’est
l’implémentation
Comment on y va !
DDD – STRATÉGIE ET TACTIQUE
DDD – LES PATTERNS STRATÉGIQUES
Les patterns stratégiques du Domain-Driven Design (tirés du livre « DDD Vite Fait »)
Le langage partagé permet de
fournir un vocabulaire issu du
métier qui est identique entre le
métier et l'équipe technique.
DDD – LANGAGE UBIQUITAIRE
https://www.jpattonassociates.com/glad-we-all-agree-2/
DDD – LANGAGE UBIQUITAIRE
Cependant un terme peut avoir plusieurs significations différentes en fonction du contexte:
• Du côté de la comptabilité, un client c’est la personne qui paye les factures.
• Pour le marketing, un client c’est la personne qu’il a au téléphone et qui utilise l’outil.
• Chez les développeurs, un client, c’est une entreprise inscrite sur la plateforme qu’ils ont
développée.
Un contexte borné représente une
façon de voir le monde.
1 BC = 1 Base de code
1 BC = 1 Ubiquitous Language
DDD – CONTEXTE BORNÉ
DDD – CONTEXTE BORNÉ
https://martinfowler.com/bliki/BoundedContext.html
Core Domain
Supporting Domain
Generic Domain
DDD – CONTEXTE BORNÉ
DDD –SHARED KERNEL
On utilise un ACL si on veut
communiquer avec du code
legacy sans corrompre nos
contextes bornés.
DDD – ANTI CORRUPTION LAYER
DDD – LES PATTERNS TACTIQUES
Les patterns tactiques du Domain-Driven Design (tirés du livre « DDD Vite Fait »)
DDD – VALUE OBJECT
Les entités permettent de créer de
l'identité, quelque chose d'unique,
distinguable parmi d'autres
éléments - c'est pourquoi elles
ont souvent un ID unique.
DDD – ENTITÉ
DDD – ET PLEIN D’AUTRES
Aggregate Roots
Services
Repository
Factory
Architecture en couches
TALK DEVFEST NANTE
[DevFest Nantes 2022] Bien se lancer dans le Domain Driven Design sans se tromper
de combat
Rennes
35 Boulevard Solférino
35000 Rennes
Paris
350 rue de Vaugirard
75015 Paris
Nantes
Whoorks Nantes Gare
17 Boulevard de Berlin
44000 Nantes
+ 33 2 30 96 21 60
www.spikeelabs.fr

Contenu connexe

Similaire à Domain_Driven_Design

Faire la conception en équipe sans architecte, non mais allô quoi ?
Faire la conception en équipe sans architecte, non mais allô quoi ?Faire la conception en équipe sans architecte, non mais allô quoi ?
Faire la conception en équipe sans architecte, non mais allô quoi ?Ly-Jia Goldstein
 
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisantcluelessjoe
 
DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)Cyrille Martraire
 
Yannick DUPUIS
Yannick DUPUISYannick DUPUIS
Yannick DUPUISYannick D.
 
Digitalisation : Améliorez la collaboration et l’expérience client grâce au DAM
Digitalisation : Améliorez la collaboration et l’expérience client grâce au DAMDigitalisation : Améliorez la collaboration et l’expérience client grâce au DAM
Digitalisation : Améliorez la collaboration et l’expérience client grâce au DAMNuxeo
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010François Wauquier
 
DDD - Le minimum à savoir
DDD - Le minimum à savoirDDD - Le minimum à savoir
DDD - Le minimum à savoirarpinum
 
[TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte![TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte!Alexandre Touret
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilNormandy JUG
 
Introduction au nouveau moteur de workflow de Microsoft : Flow
Introduction au nouveau moteur de workflow de Microsoft : FlowIntroduction au nouveau moteur de workflow de Microsoft : Flow
Introduction au nouveau moteur de workflow de Microsoft : FlowSabrine Chouk
 
Introduction au nouveau moteur de workflow de Microsoft : Flow (Serge Luca)
Introduction au nouveau moteur de workflow de Microsoft : Flow (Serge Luca)Introduction au nouveau moteur de workflow de Microsoft : Flow (Serge Luca)
Introduction au nouveau moteur de workflow de Microsoft : Flow (Serge Luca)serge luca
 
Emakina Academy - Blue Kiwi - 20070614
Emakina Academy - Blue Kiwi -  20070614Emakina Academy - Blue Kiwi -  20070614
Emakina Academy - Blue Kiwi - 20070614Marin
 
Livre blanc Rubedo - Plateforme digitale open-source
Livre blanc Rubedo - Plateforme digitale open-sourceLivre blanc Rubedo - Plateforme digitale open-source
Livre blanc Rubedo - Plateforme digitale open-sourceRubedo, a WebTales solution
 
Coder sans coder : Delphi en mode no code !
Coder sans coder : Delphi en mode no code !Coder sans coder : Delphi en mode no code !
Coder sans coder : Delphi en mode no code !pprem
 
Migrer vers le cloud grace au Model-Driven
Migrer vers le cloud grace au Model-DrivenMigrer vers le cloud grace au Model-Driven
Migrer vers le cloud grace au Model-DrivenPascal Roques
 
Domain Driven Design - Agile Tour Lille 2009
Domain Driven Design - Agile Tour Lille 2009Domain Driven Design - Agile Tour Lille 2009
Domain Driven Design - Agile Tour Lille 2009François Wauquier
 
infrastructure as code & software craftmanship
infrastructure as code & software craftmanshipinfrastructure as code & software craftmanship
infrastructure as code & software craftmanshipMichel HUBERT
 

Similaire à Domain_Driven_Design (20)

Faire la conception en équipe sans architecte, non mais allô quoi ?
Faire la conception en équipe sans architecte, non mais allô quoi ?Faire la conception en équipe sans architecte, non mais allô quoi ?
Faire la conception en équipe sans architecte, non mais allô quoi ?
 
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 
DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)
 
Yannick DUPUIS
Yannick DUPUISYannick DUPUIS
Yannick DUPUIS
 
Digitalisation : Améliorez la collaboration et l’expérience client grâce au DAM
Digitalisation : Améliorez la collaboration et l’expérience client grâce au DAMDigitalisation : Améliorez la collaboration et l’expérience client grâce au DAM
Digitalisation : Améliorez la collaboration et l’expérience client grâce au DAM
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010
 
Introduction Dart
Introduction DartIntroduction Dart
Introduction Dart
 
DDD - Le minimum à savoir
DDD - Le minimum à savoirDDD - Le minimum à savoir
DDD - Le minimum à savoir
 
[TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte![TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte!
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice Duteil
 
L'industrie du meuble se transforme
L'industrie du meuble se transformeL'industrie du meuble se transforme
L'industrie du meuble se transforme
 
Introduction au nouveau moteur de workflow de Microsoft : Flow
Introduction au nouveau moteur de workflow de Microsoft : FlowIntroduction au nouveau moteur de workflow de Microsoft : Flow
Introduction au nouveau moteur de workflow de Microsoft : Flow
 
Introduction au nouveau moteur de workflow de Microsoft : Flow (Serge Luca)
Introduction au nouveau moteur de workflow de Microsoft : Flow (Serge Luca)Introduction au nouveau moteur de workflow de Microsoft : Flow (Serge Luca)
Introduction au nouveau moteur de workflow de Microsoft : Flow (Serge Luca)
 
Quoi de neuf dans Office 365?
Quoi de neuf dans Office 365?Quoi de neuf dans Office 365?
Quoi de neuf dans Office 365?
 
Emakina Academy - Blue Kiwi - 20070614
Emakina Academy - Blue Kiwi -  20070614Emakina Academy - Blue Kiwi -  20070614
Emakina Academy - Blue Kiwi - 20070614
 
Livre blanc Rubedo - Plateforme digitale open-source
Livre blanc Rubedo - Plateforme digitale open-sourceLivre blanc Rubedo - Plateforme digitale open-source
Livre blanc Rubedo - Plateforme digitale open-source
 
Coder sans coder : Delphi en mode no code !
Coder sans coder : Delphi en mode no code !Coder sans coder : Delphi en mode no code !
Coder sans coder : Delphi en mode no code !
 
Migrer vers le cloud grace au Model-Driven
Migrer vers le cloud grace au Model-DrivenMigrer vers le cloud grace au Model-Driven
Migrer vers le cloud grace au Model-Driven
 
Domain Driven Design - Agile Tour Lille 2009
Domain Driven Design - Agile Tour Lille 2009Domain Driven Design - Agile Tour Lille 2009
Domain Driven Design - Agile Tour Lille 2009
 
infrastructure as code & software craftmanship
infrastructure as code & software craftmanshipinfrastructure as code & software craftmanship
infrastructure as code & software craftmanship
 

Plus de SpikeeLabs

VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023SpikeeLabs
 
Novu _ La cloche de l'intranet va enfin faire _Dring🔔
Novu _ La cloche de l'intranet va enfin faire _Dring🔔Novu _ La cloche de l'intranet va enfin faire _Dring🔔
Novu _ La cloche de l'intranet va enfin faire _Dring🔔SpikeeLabs
 
Power BI _ La data n'a plus de secret pour vous
Power BI _ La data n'a plus de secret pour vousPower BI _ La data n'a plus de secret pour vous
Power BI _ La data n'a plus de secret pour vousSpikeeLabs
 
Retour BreizhCamp 2023
Retour BreizhCamp 2023 Retour BreizhCamp 2023
Retour BreizhCamp 2023 SpikeeLabs
 
Mots de passe : Protégez-les, gérez-les, oubliez-les !
Mots de passe : Protégez-les, gérez-les, oubliez-les !Mots de passe : Protégez-les, gérez-les, oubliez-les !
Mots de passe : Protégez-les, gérez-les, oubliez-les !SpikeeLabs
 
Retour sur les conférences du DevFest de Nantes 2022
Retour sur les conférences du DevFest de Nantes 2022Retour sur les conférences du DevFest de Nantes 2022
Retour sur les conférences du DevFest de Nantes 2022SpikeeLabs
 
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...SpikeeLabs
 
BreizhCamp 2022
BreizhCamp 2022BreizhCamp 2022
BreizhCamp 2022SpikeeLabs
 
Méthodologie de tests et qualité
Méthodologie de tests et qualitéMéthodologie de tests et qualité
Méthodologie de tests et qualitéSpikeeLabs
 
Salesforce : les pouvoirs d’un empire
Salesforce : les pouvoirs d’un empireSalesforce : les pouvoirs d’un empire
Salesforce : les pouvoirs d’un empireSpikeeLabs
 
Windows ou Linux : il faut choisir... ou pas !
Windows ou Linux : il faut choisir... ou pas !Windows ou Linux : il faut choisir... ou pas !
Windows ou Linux : il faut choisir... ou pas !SpikeeLabs
 
9 choses que vous ignorez sur Alice et Bob
9 choses que vous ignorez sur Alice et Bob9 choses que vous ignorez sur Alice et Bob
9 choses que vous ignorez sur Alice et BobSpikeeLabs
 
Kit de survie en Production
Kit de survie en ProductionKit de survie en Production
Kit de survie en ProductionSpikeeLabs
 
Déploiement Kubernetes
Déploiement KubernetesDéploiement Kubernetes
Déploiement KubernetesSpikeeLabs
 
Le design d'API avec Mulesoft
Le design d'API avec MulesoftLe design d'API avec Mulesoft
Le design d'API avec MulesoftSpikeeLabs
 

Plus de SpikeeLabs (16)

VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023
 
Novu _ La cloche de l'intranet va enfin faire _Dring🔔
Novu _ La cloche de l'intranet va enfin faire _Dring🔔Novu _ La cloche de l'intranet va enfin faire _Dring🔔
Novu _ La cloche de l'intranet va enfin faire _Dring🔔
 
Power BI _ La data n'a plus de secret pour vous
Power BI _ La data n'a plus de secret pour vousPower BI _ La data n'a plus de secret pour vous
Power BI _ La data n'a plus de secret pour vous
 
Retour BreizhCamp 2023
Retour BreizhCamp 2023 Retour BreizhCamp 2023
Retour BreizhCamp 2023
 
Mots de passe : Protégez-les, gérez-les, oubliez-les !
Mots de passe : Protégez-les, gérez-les, oubliez-les !Mots de passe : Protégez-les, gérez-les, oubliez-les !
Mots de passe : Protégez-les, gérez-les, oubliez-les !
 
DesignSystem
DesignSystemDesignSystem
DesignSystem
 
Retour sur les conférences du DevFest de Nantes 2022
Retour sur les conférences du DevFest de Nantes 2022Retour sur les conférences du DevFest de Nantes 2022
Retour sur les conférences du DevFest de Nantes 2022
 
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
 
BreizhCamp 2022
BreizhCamp 2022BreizhCamp 2022
BreizhCamp 2022
 
Méthodologie de tests et qualité
Méthodologie de tests et qualitéMéthodologie de tests et qualité
Méthodologie de tests et qualité
 
Salesforce : les pouvoirs d’un empire
Salesforce : les pouvoirs d’un empireSalesforce : les pouvoirs d’un empire
Salesforce : les pouvoirs d’un empire
 
Windows ou Linux : il faut choisir... ou pas !
Windows ou Linux : il faut choisir... ou pas !Windows ou Linux : il faut choisir... ou pas !
Windows ou Linux : il faut choisir... ou pas !
 
9 choses que vous ignorez sur Alice et Bob
9 choses que vous ignorez sur Alice et Bob9 choses que vous ignorez sur Alice et Bob
9 choses que vous ignorez sur Alice et Bob
 
Kit de survie en Production
Kit de survie en ProductionKit de survie en Production
Kit de survie en Production
 
Déploiement Kubernetes
Déploiement KubernetesDéploiement Kubernetes
Déploiement Kubernetes
 
Le design d'API avec Mulesoft
Le design d'API avec MulesoftLe design d'API avec Mulesoft
Le design d'API avec Mulesoft
 

Domain_Driven_Design

  • 3. DOMAIN-DRIVEN DESIGN Pas un Framework Pas une technique de code C’est une philosophie et une boite à outils
  • 4. Le but de DDD c’est d'éviter ça ! DOMAIN-DRIVEN DESIGN « Ce que le client voulait vraiment » : http://www.projectcartoon.com/cartoon/2
  • 5. « The blue book » « Tackling Complexity in the Heart of Software » Ecrit par Eric Evans en 2003 DOMAIN-DRIVEN DESIGN – LES ORIGINES
  • 7. La Stratégie définit l’objectif Où on va ! La Tactique, c’est l’implémentation Comment on y va ! DDD – STRATÉGIE ET TACTIQUE
  • 8. DDD – LES PATTERNS STRATÉGIQUES Les patterns stratégiques du Domain-Driven Design (tirés du livre « DDD Vite Fait »)
  • 9. Le langage partagé permet de fournir un vocabulaire issu du métier qui est identique entre le métier et l'équipe technique. DDD – LANGAGE UBIQUITAIRE https://www.jpattonassociates.com/glad-we-all-agree-2/
  • 10. DDD – LANGAGE UBIQUITAIRE Cependant un terme peut avoir plusieurs significations différentes en fonction du contexte: • Du côté de la comptabilité, un client c’est la personne qui paye les factures. • Pour le marketing, un client c’est la personne qu’il a au téléphone et qui utilise l’outil. • Chez les développeurs, un client, c’est une entreprise inscrite sur la plateforme qu’ils ont développée.
  • 11. Un contexte borné représente une façon de voir le monde. 1 BC = 1 Base de code 1 BC = 1 Ubiquitous Language DDD – CONTEXTE BORNÉ
  • 12. DDD – CONTEXTE BORNÉ https://martinfowler.com/bliki/BoundedContext.html
  • 13. Core Domain Supporting Domain Generic Domain DDD – CONTEXTE BORNÉ
  • 15. On utilise un ACL si on veut communiquer avec du code legacy sans corrompre nos contextes bornés. DDD – ANTI CORRUPTION LAYER
  • 16. DDD – LES PATTERNS TACTIQUES Les patterns tactiques du Domain-Driven Design (tirés du livre « DDD Vite Fait »)
  • 17. DDD – VALUE OBJECT
  • 18. Les entités permettent de créer de l'identité, quelque chose d'unique, distinguable parmi d'autres éléments - c'est pourquoi elles ont souvent un ID unique. DDD – ENTITÉ
  • 19. DDD – ET PLEIN D’AUTRES Aggregate Roots Services Repository Factory Architecture en couches
  • 20. TALK DEVFEST NANTE [DevFest Nantes 2022] Bien se lancer dans le Domain Driven Design sans se tromper de combat
  • 21. Rennes 35 Boulevard Solférino 35000 Rennes Paris 350 rue de Vaugirard 75015 Paris Nantes Whoorks Nantes Gare 17 Boulevard de Berlin 44000 Nantes + 33 2 30 96 21 60 www.spikeelabs.fr

Notes de l'éditeur

  1. il s’agit de représenter le métier directement dans le code. Plutôt que de coder le métier. on se base sur le métier pour assembler la solution que l’on apporte au business, autrement dit notre code. Ainsi, la structure, le nom des classes, des champs, les actions des fonctions : tout ceci doit refléter le métier.
  2. On a tous vu cette image Avec DDD, on livrera quelque chose qu’attend le client car on aura compris dès le début ce qu’il souhaitait.
  3. Il présente ce livre comme étant le fruit de 20 années de bonnes pratiques de développement tirées au sein de la communauté de la programmation orientée objet et du software craftsmanship.
  4. Avant de commencer à coder il faut voir où on va. Partant de ce principe, le DDD veut d’abord faire monter les équipes en compétence sur le domaine métier grâce à certains outils ou méthodes (les patterns stratégiques). Une fois que cette partie est totalement comprise, on essayera de retranscrire au mieux cette partie métier dans le code.
  5. Pour ce faire DDD fourni des patterns Stratégiques pour assister la modélisation
  6. Ce langage commun permet de mettre des mots précis sur le domaine d’expertise et de s’entendre sur les bons termes à utiliser lors des communications. Souvent les ambiguïtés et les incompréhensions entre le business et l’équipe de dev sont créées par le langage utilisé dans les communications. En utilisant l’Ubiquitous Language, on sait que tous les termes ne se valent pas.
  7. Tout le monde l'appelle client... Et potentiellement, ce ne sera pas la même personne.
  8. Le contexte borné est limité par son contexte métier. Par principe, tu ne devrais pas avoir besoin de partager du code entre tes contextes si jamais ils sont limités et clairement définis.
  9. Un bounded context contient du code qui doit rester à l’intérieur de ses propres frontières. Cela crée souvent de la duplication au lieu d’en supprimer mais c’est une bonne chose. Pour le service de vente le client n’a potentiellement pas la même adresse que le service de support. Un bounded context ne DOIT PAS en affecter un autre. Aussi avoir un peu de duplication pour protéger le contexte en cas d’évolution est une bonne chose.
  10. Core Domain : Le cœur de domaine, c'est le cœur du business. Support Domain : Pour les sous-domaines, ce sont les problèmes qui viennent avec notre problème principal. Generic Domain : Gestion des utilisateurs, autorisations, paiement, emails…
  11. Les Shared Kernel permettent de factoriser des entités appartenant à plusieurs contextes bornés. Chaque changement dans le noyau occasionne une communication des équipes sur les changements apportés Les éléments du noyau doivent être testés un maximum dans le noyau et en dehors. Car il s’agit là d’un point où potentiellement un commit peut tuer un bounded context.
  12. Les Shared Kernel permettent de factoriser des entités appartenant à plusieurs contextes bornés. Chaque changement dans le noyau occasionne une communication des équipes sur les changements apportés Les éléments du noyau doivent être testés un maximum dans le noyau et en dehors car il s’agit là d’un point où potentiellement un commit peut tuer un bounded context.
  13. Pour ce faire DDD fournit des patterns techniques pour l’implémentation.
  14. Les Value Objects simplifient le design, ils sont partageables, immuables, copiables, serializables... Ils ne doivent pas avoir de setter. Les avantages d’un objet-valeur : Découper les entités plus proprement Dégager de la complexité métier dans une classe dédiée Exprimer le domaine métier plus facilement Garder la complexité d’un objet à l’intérieur de ce dernier
  15. Les entités sont mutables.
  16. Des questions ?