Introduction au Domain Driven Design, un livre rempli de bonnes idées pour concevoir avec agilité ses applications (conception et modélisation émergente, adéquation de la solution au problème adressé, stratégie du découpage en module et des interactions inter-équipes, alignement entre le métier et les développeurs ...)
2. A propos de nous
Guillaume Collic JP Gouigoux
Acteur de l’agilité Architecte logiciel
@gcollic
Blog : guillaumecollic.com blogs.dotnet-france.com/jeanphilippeg
2 /53
3. Plan
• Introduction
• DDD
– Modéliser le domaine
– Distiller le domaine
– Cartographier le Système, ses interactions et ses contextes
• DDD et l’existant
• CQRS
• Conclusion
3 /53
6. Objectif de la session
6 /53
http://www.flickr.com/photos/jm3/385649149/
7. Domaine ?
• Sujet auquel un utilisateur applique un
programme
– =~ Métier / Business / Fonctionnel / Marché
• Focalisé
– valeur ajoutée
– avantage concurrentiel
7 /53
8. Exemple de domaine
• Application de fret de marchandise
– Avantage concurrentiel
• Rapidité de livraison ?
– Optimisation du fret !
• Suivi en direct des marchandises ?
– Traçabilité !
8 /53
9. Complexité s d’un système logiciel
• Complexité inhérente
• Complexité réelle
• Delta
– incapacité à faire correspondre la solution au
problème
9 /53
11. DDD : Quels objectifs ?
• Minimiser cette différence
– Tacler la complexité réelle
– Clarifier la complexité inhérente
• Focaliser
– Le logiciel sur l’avantage concurrentiel
– L’entreprise sur sa stratégie
11 /53
12. Quels moyens ?
• Aspects techniques
• Techniques de
modélisation
• Stratégies d’entreprise
• Principes et bonnes
pratiques
• Urbanisation Agile du SI
12 /53
http://www.flickr.com/photos/phploveme/2746295460
13. Quels acteurs ?
• Toute partie prenante
• Même la direction
– Stratégie
13 /53
14. Pré-requis
• Processus incrémental
• Accès aux experts du domaine
“You just have to have them. And if you don’t, you just can’t
do DDD.”
Eric Evans
=> Agilité ?
14 /53
15. Remanier le modèle vers une compréhension accrue
MODÉLISER LE DOMAINE
15 /53
16. Le modèle ?
• Représentation / vue
– du domaine
– dans un but particulier : contexte borné
• Sous-jacent
– Pas « qu’ un » document UML
16 /53
17. Le modèle est vivant
• Apprentissage permanent
– Brainstorming
– Expérimentation
– Aggrégation de connaissances
• Collaboration avec les experts du domaine
17 /53
26. Extraire et purifier le domaine
( découpage en modules)
http://www.flickr.com/photos/nygard/360096766/
http://www.flickr.com/photos/matthiasr/516575241 26 /53
http://www.flickr.com/photos/helenaliu/3703425234
27. Cœur du domaine
• Quoi ?
– Ce qui a le plus de valeur
• Avantage concurrentiel
• Par qui ?
– Développeurs
• Talentueux
• Pérennes
27 /53
28. Sous-domaines génériques
• Quoi ?
– Ensembles cohérents
– Pas la motivation propre du projet : en support
• Par qui ?
– moins expérimentés
– moins pérennes
– Sur étagère / externalisés
• Exemple : Gestion de fuseaux horaires
• Pas forcément réutilisable !
28 /53
29. Maintenir l’intégrité du modèle
CARTOGRAPHIER LE SYSTÈME, SES
INTERACTIONS ET SES CONTEXTES
29 /53
30. Contextes
• Service logistique • Service commercial
– Fournies par palette – 0,30 € la bouteille de
• 720 bouteilles 75cl
• Iso1 : 800 × 1200 mm – 6 pour le prix de 5
30 /53
31. Patterns de cartographie des
contextes
Interactions entre composant des systèmes
– entre modules de l’application
– entre applications
http://www.infoq.com/articles/ddd-contextmapping 31 /53
Alberto Brandolini
32. Noyau partagé
share d
Translation
Map
Eric Evans, DOMAIN-DRIVEN DESIGN, Addison-Wesley, Eric Evans, 2004.
Creative Commons Deed: Attribution 2.0
32 /53
37. Couche anti-corruption
Notre sous système
• Exposer les services … … …
Classe Classe
souhaités élégante expressive
– Langage ubiquitaire
Service A Service B
• Traduire Adaptateur 1 Adaptateur 2
– Patterns adaptateurs Traducteur 1
Couche
• Simplifier l’interface anti-corruption
Façade
externe …
… Classe pas
– Pattern façade avec le … … très propre
strict nécessaire … … Interface
Autre sous système compliquée 423XB
37 /53
40. DDD & Orienté objet
• l’Orienté objet bien fait ?
40 /53
41. DDD & Orienté objet
• Ça dépend du domaine !
– Différents problèmes, différents paradigmes
• Orienté objet
• Fonctionnel (sens mathématique)
• DSL
– Domain Specific Language
• Workflow
• Etc.
– A combiner
• Avec beaucoup de modération
41 /53
42. DDD & agilité
• Message fort sur la conception/modélisation
42 /53
43. DDD & agilité
• Nombreuses pratiques induites
– Refactoring
– Intégration continue
– Test first
– Simplicité
–…
43 /53
44. Apports
• Langage ubiquitaire
– User stories, code, tests, Definition of Done, …
• Workshop avec les experts
– Place du PO ?
• Cartographie des contextes
– Un outil pour les relations entre équipes et ainsi
passer l’agilité à l’échelle ?
44 /53
45. Architectures avancées en DDD
DDDD (DISTRIBUTED DDD) & CQRS
(COMMAND AND QUERY RESPONSIBILITY
SEGREGATION)
45 /53
46. Évènements du domaine
• Objet décrivant un évènement métier
– Décrit l’intention
– Découple producteurs et consommateurs
• Bus
– Permet éventuellement de reconstruire l’état
• Log d’évènements
46 /53
47. Évènement != commande
!= DTO IHM
• Commande
– Achat : panier {4213}, adresse {1}
– Nécessite un traitement métier
• Évènement
– A acheté : Produit XXX, prix HT X, TVA Y, prix TTC
Z, livraison adresse ZZ
– Résultat autosuffisant : plus de traitements
• DTO IHM
– Achats , leurs statuts, …
47 /53
50. Il y a 20 ans…
RAM DE
VOTRE
SERVEUR
VOS DONNEES
VOS DONNEES
ROM DE VOTRE SERVEUR
/53
51. Les conséquences
RAM DE
Besoin de monter VOTRE
X
SERVEUR
efficacement de la donnée
nécessaire au traitement
depuis les disques durs vers
la RAM
VOS DONNEES
ROM DE VOTRE SERVEUR
/53
52. Aujourd’hui
VOS DONNEES SERVEUR
RAM DE VOTRE
VOS DONNEES
ROM DE VOTRE SERVEUR
14/10/10 /53
54. L’essentiel
• Collaboration créative entre experts du domaine
et experts du logiciel
• Exploration et expérimentation
• Modèles émergents formant et reformant le
langage ubiquitaire
• Frontières des contextes explicites
• Se concentrer sur le cœur du domaine
“ If I had to give up everything else, these would be
the things I would focus on ” Eric Evans, 2009
54 /53