Daily DDD
Les pratiques du quotidien qui peuvent changer une équipe
http://www.ouarzy.com
@ouarzy
Emilien Pecoul
Domain Driven Design
520 pages (!)
@ouarzy
Que signifie concevoir un logiciel?
@ouarzy
@ouarzy
Abstraire
De A à Z
Que signifie concevoir un logiciel?
Domain Driven Design
@ouarzy
Domain Driven Design
@ouarzy
Domain Driven Design
@ouarzy
Domain Driven Design
@ouarzy
Le monde du DDD
Anemic Domain ModelUbiquitous Language
Bounded Context
CQS
Domain Services
Event Sourcing
CQRS
Event Storming
Entities
Value Objects
Aggregate
@ouarzy
Le DDD c’est compliqué
Par quel bout on le prend?
#DDDReboot!
@ouarzy
Stratégie VS Tactique
-Domain/SubDomain
-Bounded Context
-Context Maps
-Composite
-Shared Kernel
-Conformist
-Anti Corruption
-…
-Aggregate
-Entities
-Value Objects
-Repositories
-Factories
-Domain Services
-Application Services
-…
Où aller ? Comment y aller ?
@ouarzy
Le DDD c’est compliqué
@ouarzy
Le DDD c’est compliqué
@ouarzy
Le DDD peut me servir ?
@ouarzy
Anti DDD expressions
« C’est juste une base de données »
@ouarzy
Anti DDD expressions
« Ce n’est pas mon problème si les specs sont fausses»
« J’ai codé ce qui était demandé »
@ouarzy
Anti DDD expressions
« Ils ne savent pas ce qu’ils veulent ! »
@ouarzy
Anti DDD expressions
« On ne peut pas avancer tant que l’équipe X n’a pas terminée »
« Il faut une équipe Backend et une équipe Frontend !»
@ouarzy
DDD et micro-services
« Mais on fait déjà des micro-services ! »
@ouarzy
DDD et micro-services
@ouarzy
Prenons des exemples
au quotidien
@ouarzy
Bounded Context
Vente Support Envoi Recommandation
@ouarzy
Bounded Context
@ouarzy
Bounded Context
@ouarzy
Créer un modèle c’est abstraire la réalité.
Cette abstraction ne peut être valable que dans un
contexte bien borné!
Bounded Context
@ouarzy
N’ayez pas peur de dupliquer la donnée pour créer une
abstraction clair par contexte.
Merci
@ouarzy
Comment on trouve les contextes?
@ouarzy
Interview d’ExpertEvent Storming
Analyser les dépendances
Impact Mapping
Ne pas jouer au téléphone arabe !
« C’est ce que comprend (ou pas) le développeur qui ira en production, 
pas votre compréhension du métier... » 
@ouarzy
Comment on trouve les contextes?
Chef de projet
Expert métier
Problème
Expert métier
Développeuse
Testeur
@ouarzy
Résoudre les problèmes ensemble
Résoudre les problèmes ensemble
Rencontrer les utilisateurs!
@ouarzy
Résoudre les problèmes ensemble
Pair/Mob Programming Code Review
@ouarzy
Aligner le code et le métier
Ubiquitous Language
- 2 mots identiques doivent avoir le même sens métier
- 2 mots différents ne doivent pas désigner un même concept
@ouarzy
Domain Infrastructure
- Bases de Données (ORM)
- Controller web
- Vues
-API Distantes
- Logique métier
- Ubiquitous Language
Aligner le code et le métier
@ouarzy
Aligner le code et le métier
Architecture hexagonale
@ouarzy
Aligner le code et le métier
Montrez votre code aux experts métier…
…Ils ne comprennent pas?
Vous êtes le problème.
@ouarzy
Documentation vivante
Aligner le code et le métier
@ouarzy
Changelog à partir des commits
Aligner le code et le métier
@ouarzy
Tester, car le métier va évoluer...
Automatiquement, car vous n’aurez jamais le temps...
Un code simple à modifier
No time for testing death spiral
Pressure
TestingErrors + -
+
+-
-
@ouarzy
Des bonnes pratiques pour un Feedback rapide
Un code simple à modifier
@ouarzy
Du code lisible
Un code simple à modifier
Trop de personnes supposent qu’un problème majeur de l’industrie logiciel
est d’écrire du code,
alors qu’il se trouve dans la lecture du code
await Task.WhenAll(t1, t2, t3, t4);
@ouarzy
Le DDD c’est surtout des bonnes habitudes au quotidien…
Bref 1/3
…Pour toute l’entreprise!
@ouarzy
Et le respect de l’expertise de chacun
Bref 2/3
@ouarzy
Dans un contexte bien défini
Bref 3/3
@ouarzy
References
https://leanpub.com/livingdocumentationLiving Documentation
Event Storming
@cyriux
https://leanpub.com/introducing_eventstorming
@ziobrando
Domain Driven Design:Tackling Complexity In The
Heart of Software@ericevans0
@ScottMillett
Patterns, Principles and Practices of DDD
References
Hexagonal Architecture
#DDDReboot
@TotherAlistair
@tpierrain et jgrodziski
Impact Mapping
@gojkoadzic
Domain Modeling Made Functional
@ScottWlaschin
http://www.ouarzy.com
Merci !
@ouarzy
Emilien Pecoul

Daily ddd