Introduction au DDD

Nicolas Eeckeloo

Les phrases qu'on entend

  • “J’en ai déjà entendu parlé … mais je ne vois pas trop ce que c’est”
  • “Ca doit avoir un rapport avec le TDD.”
  • “Hein ? T’as un problème avec la touche D !”
  • “Le DDD, j’ai lu l’article Wikipédia, c’est de la merde”

Le DDD, ce n'est pas :

  • une nouvelle technologie révolutionnaire
  • une méthode miracle pour architecturer une application
  • un outil à la mode qui va bientôt devenir obsolète
  • des entités Doctrine sans les getters/setters

The heart of software is its ability to solve domain-related problems to its user

Eric Evans

Le DDD, c'est quoi ?

  • une approche pour concevoir des logiciels de qualité
  • des outils de conception pour atteindre les objectifs métiers
  • développe la connaissance métier
  • utilise la technologie pour créer de la valeur
  • comprendre l'activité de votre entreprise afin de produire un langage commun

Pourquoi le Domain-Driven Design ?

  • un seul et unique langage

  • priorités logicielles alignées avec les priorités métier

  • apprentissage du métier par tous

  • contribution de tous à l'étude du métier

  • pas de traductions nécessaires entre les différentes parties prenantes

  • délivrer de la valeur de manière continue

  • un framework pour le strategic et tactical design

Ubiquitous Language

Adjective : Existing or being everywhere, especially at the same time; omnipresent.

[yoo-bik-wi-tuh s]

A language structured around the domain model and used by all team members to connect all the activities of the team with the software.

Eric Evans

Quand et où l'utiliser ?

  • user stories
  • réunions de projet
  • emails
  • planning
  • documentation
  • code source

Avantages

  • risques d’incompréhensions diminués

  • meilleure communication entre les parties prenantes du projet

  • connaissance du métier présent dans le code de manière explicite

  • code source plus facile à comprendre (meilleure maintenabilité et évolutivité du code)

Strategic vs Tactical Design

Strategic Design First

  • plus axé sur le domaine et l'importance de la connaissance du domaine
  • impossible d'atteindre l'objectif sans connaissance approfondie du domaine
  • développeurs qui se focalisent à tort sur le Tactical Design
  • les Stategical Patterns répondent davantage aux problématiques des projets complexes (Bounded Context, Context Mapping, Ubiquitous Language)

Sub-domains

  • Generic Domain
  • Supporting Domain
  • Core Domain

Generic Domain

  • parties du système qui facilitent le métier, mais qui ne font pas partie du coeur de métier (abonnement, facturation)

  • concepts critiques mais qui ne font pas partie du coeur de métier

  • parties du métier qui peuvent éventuellement être outsourcées ou déléguées à une solution SaaS

Supporting Domain

  • parties du systèmes également nécessaires

  • fonctions de support directement relatives au métier principal

  • code de qualité et parfaitement architecturé pas nécessaire

  • possibilité d'outsourcer cette partie ou d'assigner des développeurs peu expérimentés

  • maintenir une séparation forte avec le coeur de métier (context mapping)

Core Domain

  • partie la plus critique et fondamentale pour le métier

  • constitue l'avantage concurrentiel et l'essence même du produit

  • domaine sur lequel vous souhaitez voir travailler les personnes les plus expérimentées

Core Domain

Selon Eric Evans, le core domain devrait fournir environ 20% de la valeur totale du produit, représenter environ 5% de la base de code, et correspondre à environ 80% de l'effort total.

Context Mapping

Behaviour Driven Development

BDD is the art of using examples in conversations to illustrate behaviour

Liz Keogh

By embedding Ubiquitous Language in your scenarios, your scenarios naturally become your domain model

Konstantin Kudryashov

Modelling by example

  • la meilleure manière de comprendre le métier est de discuter autour d'exemples
  • écrire des scénarios qui illustre des situations réelles
  • écrire des scénarios qui utilisent l'ubiquitous language
  • piloter le code par ces exemples

Event Storming

  • réunir les personnes qui ont des questions et celles qui ont des réponses

  • aborder tous les composants importants le plus tôt possible afin de découvrir les problèmes potentiels

  • toucher toutes les personnes concernées le plus tôt possible, en mettant à profit ce qui ressort des interactions entre chacune

Merci

Introduction au DDD

By Nicolas Eeckeloo

Introduction au DDD

  • 1,182