DOMAIN DRIVEN DESIGN
ON Y VA EN 2019 !!
Grégory BOISSINOT





Passionate DDD Practitioner
DDD
D
D
D
DOMAIN 

DRIVEN DESIGNApproche de conception logicielle 

pour créer des applications répondant mieux aux besoins des utilisateurs

Focus sur les besoins du métier
DDD
DOMAIN (LA RÉALITÉ)
▸ Une sphère de connaissances et d’activités propres à un
métier
▸ Composée d’un vocabulaire spécialisé, d’un ensemble
de règles, d’hypothèses, de concepts issus du monde
réel
▸ Contient l’ensemble des cas d’usage à résoudre
▸ En interaction avec des experts métiers et des sphères
d’influence
DDD
LA GENÈSE (POUR NOUS TOUS)
▸ Être curieux sur le domaine
▸ Parler le langage métier
▸ Se focaliser sur les parties
les plus importantes du
logiciel
▸ Modeling <==> Code
Premier livre académique
DDD
UN CONTENU RICHE
Des patterns, des principes et des pratiques 

pour faciliter la création d’applications de logique métier complexe
DDD
L’ABOUTISSEMENT D’UNE MATURITÉ DE PRATIQUES
DDD
UN ACCÉLÉRATEUR POUR LES ÉQUIPES PROJETS
DDD
UNE BASE DE CODE SOURCE MAÎTRISÉE
Sans le DDD Avec le DDD
NOTRE MÉTIER
DDD
ON CHERCHE D’ABORD À RÉSOUDRE DES PROBLÈMES MÉTIER
DDD
LE CONTEXTE EST ROI !
▸ Concevoir, c’est prendre 

en compte le contexte
▸ Qui ? Quoi ? Comment ? Où ?
▸ En adéquation avec des contraintes
▸ Organisationnelles
▸ Techniques
▸ Humaines
DDD
ET POURTANT !!
DES CRISES À RÉSOUDRE
PRESSION SUR LA DATE
UN SYSTÈME PARFOIS DIFFICILE À MAINTENIR
DDD
LA MÉCANIQUE “LÉGO-BRIQUE” DU DDD VA NOUS AIDER
DDD
COMMENT DÉMARRER ?
DISTILLATION
DE LA RÉALITÉ
DDD
L’EXTRACTION DE L’ESSENCE MÉTIER - LE PRINCIPE KUVINGS
DDD
L’EXISTANT
“ Ce qu’on sait “
“ Ce qu’on a besoin d’apprendre “
DDD
L’ART DE LA CONNAISSANCE
La connaissance est un prérequis
DDD
LES OBJECTIFS : IDENTIFIER, DÉCOMPOSER, CLASSIFIER
Nous cherchons à identifier les parties les plus importantes
DDD
COMPRÉHENSION DU DOMAINE - ANALYSIS PATTERNS
DDD
COMPRÉHENSION DU DOMAINE - BIAN - MODÈLE STANDARD
Banking Industry Architecture Network (BIAN)
DDD
COMPRÉHENSION - ATELIERS DE COMMUNICATION & PARTAGE
Des échanges autour d’un même domaine métier
DDD
EVENT STORMING
Tout est à propos de conversations autour d’un même langage sans
ambiguïté
DDD
EVENT STORMING - CRÉATION D’UN MODÈLE
DDD
EVENT STORMING - EVENT & COMMAND
On exprime les Event & Command explicitement
DDD
EVENT STORMING - À LA FIN
Des contextes explicites
DDD
EVENT STORMING EN PRATIQUE
▸ Commencer par des
sessions interactives de 2h
▸ Inviter les bonnes personnes
▸ Capitaliser immédiatement
dans un outil collaboratif
DDD
DOMAIN STORY TELLING & USER STORY MAPPING
▸ Souvent utilisé comme
point d’entrée 

de l’atelier de 

l’Event Storming
▸ Permet d’obtenir des
scénarios concrets
▸ Centré sur les cas
d’utilisation les plus
importants
DDD
IMPACT MAPPING
DDD
DOMAINE BANCAIRE - EXEMPLE DE DÉCOMPOSITION
DDD
DOMAINE BANCAIRE - EXEMPLE DE DÉCOMPOSITION
DDD
TECHNIQUES COMPLÉMENTAIRES - L’USAGE D’HEURISTIQUES
▸ Frontières naturelles
▸ Frontières linguistiques
▸ Equipes autonomes
▸ Autonomie des données
▸ etc
DDD
SAVOIR ÉCRIRE LES SPÉCIFICATIONS
MODEL-DRIVEN
DDD
UN MODÈLE : UNE ABSTRACTION DE LA RÉALITÉ PILOTÉ PAR UN CAS D’USAGE
On souhaite construire un modèle qui reflète une intention
DDD
MODÈLE - INTENTION #1
Carte des principaux monuments de Paris
DDD
MODÈLE - INTENTION #2
Carte des moyens de transport de Paris
DDD
UN MODÈLE UTILE ?
Plusieurs cas d’utilisation au sein d’un même modèle
DDD
RESTER PRAGMATIQUE !
ALL MODELS ARE WRONG, SOME ARE USEFULGeorges Box, statisticien
DDD
ON CONTEXTUALISE POUR LEVER LES AMBIGUÏTÉS
Nous fournissons un contexte pour chaque modèle
DDD
INITIALISATION D’UN MODÈLE CLIENT
DDD
UN MODÈLE CLIENT QUI SE COMPLEXIFIE AU FIL DU TEMPS
DDD
UN MODÈLE CLIENT QUI SE COMPLEXIFIE AU FIL DU TEMPS
DDD
SÉPARATION EN DES CONTEXTES SÉPARÉS
Chaque contexte contient un modèle séparé
DDD
CONTEXTUALISATION & RENOMNAGE
Chaque contexte est une frontière linguistique afin d’enlever de l’ambiguïté
DDD
MICROSERVICES
Nous utilisons le DDD pour trouver la granularité des Microservices
DDD
DOMAINE BANCAIRE - LES SERVICES ASSOCIÉS
DDD
UNE APPLICATION : UNE COMPOSITION DE CONTEXTE
DDD
APPLICATION DES MICROSERVICES CHEZ AMAZON
CLEAN ARCHITECTURE
DDD
DES PROPRIÉTÉS COMMUNES
▸ Maintenance dans le temps
▸ Des composants conçus indépendant
du mécanisme de persistance
▸ Isolation des responsabilités
▸ logique métier
▸ infrastructure
▸ orchestration
▸ Facile à tester
DDD
CLEAN ARCHITECTURE - LA LOGIQUE MÉTIER D’ABORD
DDD
CLEAN ARCHITECTURE - LA COMPLEXITÉ ACCIDENTELLE EST RELAYÉE
DDD
CLEAN ARCHITECTURE - SÉPARATION DE LA LOGIQUE D’UTILISATION
DDD
CLEAN ARCHITECTURE - LES CONTROLLERS REST SONT DES CLIENTS
DDD
CLEAN ARCHITECTURE - USECASE / USECASE HANDLER
DDD
CLEAN ARCHITECTURE - CQS (COMMAND QUERY SEPARATION)
Séparation des lectures et des écritures
DDD
CLEAN ARCHITECTURE - CQS
DDD
CLEAN ARCHITECTURE - MISE À PLAT
DDD
SÉPARATION EN PACKAGES
JAVA
DDD
ONION ARCHITECTURE
CODE MODELING
DDD
DOMAIN MODELING - CODE MODELING
DDD
UTILISER DES TERMES DU MÉTIER
ANY FOOL CAN WRITE CODE THAT A COMPUTER CAN UNDERSTAND,

GOOD PROGRAMMERS WRITE CODE THAT HUMANS CAN UNDERSTAND
Matin Fowler
DDD
VS
DOMAIN MODEL DANS LE CODE : QUEL LANGUE ?
Il faut préserver le langage métier du modèle
Évite le coût de traduction !!
DDD
DOCUMENTATION NATURELLE DE LA NATURE DES OBJETS
Annotations fournies par un kernel DDD
JAVA
DDD
DOMAIN - DES OBJETS RICHES AU LIEU DE DAO
JAVA
TERME MÉTIER
OPÉRATION MÉTIER
DDD
DOMAIN - DES OBJETS RICHES AU LIEU DE DAO
JAVA
UN CONTRAT MÉTIER
DDD
DOMAIN - ALIGNEMENT DU CODE ET DU MÉTIER
LOGIQUE MÉTIER RICHE
JAVA
DDD
ON FAVORISE LES BONNES PRATIQUES
IMMUABLE
JAVA
OBJET MÉTIER TYPÉ
ENCAPSULATION
DE L’ÉTAT
PAS DE GETTER / SETTER
DDD
ON FAVORISE LES BONNES PRATIQUES
VALEUR TYPÉE
OPÉRATION MÉTIER
JAVA
DDD
COMMAND HANDLER
LOGIQUE D’ORCHESTRATION

1. CHARGEMENT DE L’ENTITÉ RACINE
2. MODIFICATION EN APPELANT L’OPÉRATION MÉTIER
3. MISE À JOUR DU REPOSITORY
INTENTION MÉTIER
JAVA
MANIPULATION D’UNE
ENTITÉ RACINE
DDD
REST CONTROLLER
JAVA
OBJET D’EXPOSITION
RATTACHÉ AU CAS D’UTILISATION
CRÉATION D’UN OBJET COMMAND 

ET ENVOIE DANS UN BUS DE COMMAND
DTO
DOMAIN DRIVEN 

REFACTORING
DDD
LE DDD INDUIT DES BONNES PRATIQUES POUR RÉSOUDRE DES PROBLÈMES
▸ Magic Number
▸ Duplications
▸ Primitive obsession
▸ Mixed Concerns
▸ Fuzzy Terminology
DDD
LEGACY - TROUVER LES SEAMS
DDD
LA SÉPARATION DES DEUX MONDES
DDD
LEGACY - COHABITATION AVEC LE DDD
Besoin d’une couche ACL (Anticorruption Layer)
DDDD

DISTRIBUTED DOMAIN DRIVEN DESIGN
CQRS
Event Sourcing
Event-Driven
DDD
EVENT-DRIVEN - EMISSION D’ÉVÉNEMENTS SIGNIFICATIFS
PUBLICATION
ÉVÉNEMENT MÉTIER
ACCÈS AU
BUS D’ÉVÉNEMENT
DDD
EVENT-DRIVEN - EMISSION D’ÉVÉNEMENTS SIGNIFICATIFS
PUBLICATION
ÉVÉNEMENT MÉTIER
DDD
CQRS (COMMAND QUERY RESPONSABILITY SEGREGATION)
PROJECTIONS
DDD
EVENT SOURCING
LE DDD, AU NIVEAU
ENTREPRISE
DDD
ATTENTION À LA SUR UTILISATION DU DDD
DDD
CONTEXT MAP
DDD
CONTEXT MAP & AUTONOMY CONTEXT
LE SOCLE
DDD
SOCLE - MÉCANISME DE BUS
Une mécanique de bus apporte une souplesse de connectivité
APPORTE
FLEXIBILITÉ
DDD
SOCLE - COMMAND BUS & QUERY BUS
Capacité de personaliser les intercepteurs en fonction des Command & Query
EN RÉSUMÉ

DDD, LE BON RÉFLEXE
DDD
APPRENDRE LE VOCABULAIRE DDD
DDD
LE DDD, DES BONNES HABITUDES AVANT TOUT !
▸ Être curieux du métier
▸ Multiplier les ateliers avec les personnes du métier
▸ Piloter vos modèles par les cas d’utilisation
▸ Ne pas se précipiter sur des architectures Microservices / CQRS /
Event Sourcing sans une approche DDD

DDD Introduction