Domain Driven Design

Mario Bensi

Atelier KDE

11/01/14

Le But ?

Comment ?

Définir un domaine

Création d'une abstraction du domaine : Le modèle

Communiquer : Langage omniprésent

Communiquer par l'écrit

UML

UML

Documents

le code

public void faireRelancesClient() {
    sql = select * from clients 
          where solde > 0
          and date_dernier_reglement < subtract(now, 3)

    jeuDonnées = execute(sql)

    foreach (enregistrement in jeuDonnées) {
        envoyerWolf(jeuDonnées["adresse"],
                    jeuDonnées["code_postal"],
                    jeuDonnées["ville"])
    }
}
public void faireRelancesClient() {
    clients = Entrepot.clients().parSpecification(
                   new SpecificationClientMauvaisPayeur())

    foreach (mauvaisPayeur in clients) {
        envoyerWolf(mauvaisPayeur.getAdresse())
    }
}

Behavior-Driven Development (BDD)

Story: Enregistrement à une formation

En tant que personne je suis à la recherche d'une formation

Je veux réserver une formation

Alors je peux apprendre et améliorer mes compétences.

Scenario: la formation est pleine

Étant donné que la formation DDD accueille 10 sièges et il y a déjà 10 personnes avec les inscriptions confirmées

Quand je m'inscris pour la formation DDD

Alors il devrait y avoir un enregistrement en attente pour moi et mon inscription devrait être sur la liste d'attente.

La conception dirigée par le modèle

Le code devient l'expression du modèle

Développement / tests

TDD

Intégration Continue

Buildbot

Jenkins

Affiner et remanier le modèle

DDD Iteration Cycle

Blocs de construction

Les éléments qui expriment le modèle

Entité

Entity

Objet Valeur

ObjectValue

Service

Les entrepôts

Repository

Les fabriques

Factory

les aggrégats

Aggregates

DDD Block

Contexte borné

Context

Architecture en couche

Architecture en couche

Architecture en oignon

Architecture en oignon

couche domaine

couche application

orchestre le travail en utilisant la couche domaine

couche service

expose les fonctionnalités et s'occupe de la sérialisation du domaine

couche présentation

expose les infos à travers la UI et reçoit les commandes utilisateur

couche infrastructure

logique d'accès aux données, bibliothèque externe...

Merci de votre attention !

Des questions ?

Quelques références :

Domain Driver Design d'Eric Evans

Applying Domain Driven Design and Pattern de Jimmy Nilsson (ex en C# et .NET)

DDD Quickly (infoQ)