Alt.Net France - Domain Driven Design - 2 Dec 2008

24
DOMAIN DRIVEN DESIGN DDD pour les intimes… Julien Lavigne du Cadet et Gauthier Segay, 2 Décembre 2008

Transcript of Alt.Net France - Domain Driven Design - 2 Dec 2008

Page 1: Alt.Net France - Domain Driven Design - 2 Dec 2008

DOMAIN DRIVEN DESIGNDDD pour les intimes…

Julien Lavigne du Cadet et Gauthier Segay, 2 Décembre 2008

Page 2: Alt.Net France - Domain Driven Design - 2 Dec 2008

QUI SOMMES NOUS?

Julien Lavigne du Cadet : Ex-Entrepreneur Expérience en finance de marché Blog : www.thedotnetfrog.fr

Gauthier Segay : Ex-Entrepreneur aussi ;-) Concepteur logiciel chez Logica

Page 3: Alt.Net France - Domain Driven Design - 2 Dec 2008

SONDAGE

Qui à entendu parler du DDD? Qui pratique le DDD sur un projet?

Page 4: Alt.Net France - Domain Driven Design - 2 Dec 2008

ORIGINE...

Expression popularisée par Eric Evans en 2003 dans :

Page 5: Alt.Net France - Domain Driven Design - 2 Dec 2008

UN CONCEPT RÉCENT!

Page 6: Alt.Net France - Domain Driven Design - 2 Dec 2008

MAIS C’EST QUOI AU JUSTE?

Page 7: Alt.Net France - Domain Driven Design - 2 Dec 2008

DOMAIN DRIVEN DESIGN

Focus sur le domaine

Regrouper tout le savoir sur un domaine donné au sein d’une même couche

Développer un langage partagé par l’équipe de développement ET le business ◦ => Ubiquitous language

Modèlisation purement orientée objet

Page 8: Alt.Net France - Domain Driven Design - 2 Dec 2008

UN CONTRE EXEMPLE : THE SMART UI “ANTI-PATTERN”

Page 9: Alt.Net France - Domain Driven Design - 2 Dec 2008

UN CONTRE EXEMPLE : THE SMART UI “ANTI-PATTERN”

Page 10: Alt.Net France - Domain Driven Design - 2 Dec 2008

LES AVANTAGES

Regrouper le savoir fonctionnel au même endroit : Meilleure compréhension Meilleure maintenabilité DRY : Don’t Repeat Yourself Plus stable que les autres couches

Faciliter les tests : Isolation

Page 11: Alt.Net France - Domain Driven Design - 2 Dec 2008

UN EXEMPLE...Avant Refactoring... Après...

Page 12: Alt.Net France - Domain Driven Design - 2 Dec 2008

LES “BUILDING BLOCKS”

Architecture en couchePOCO as a lifestyleEntities, Value ObjectsRoot AggregatesRepositoriesServices

Page 13: Alt.Net France - Domain Driven Design - 2 Dec 2008

ARCHITECTURE EN COUCHE

Le domaine est indépendant !

Page 14: Alt.Net France - Domain Driven Design - 2 Dec 2008

POCO AS A LIFESTYLE

POCO = Plain Old CLR Objects

Page 15: Alt.Net France - Domain Driven Design - 2 Dec 2008

ENTITIES & VALUE OBJECTS

Entity : possède une identité propre représente un objet du domaine encapsule tout ou partie de la logique métier ex: Customer, Bill, Product

Value Object : sans identité propre (peut être substitué) généralement utilisé comme attribut ou paramètre, peut

aussi référencer des entités ex: PostalAddress, URL, IPAddress, DateTimeOffset,

CurrencyAmount

Page 16: Alt.Net France - Domain Driven Design - 2 Dec 2008

ENTITIES & VALUE OBJECTS

Comment classifier un objet du domaine entre value object et entité?

Cela dépend du domaine!

Page 17: Alt.Net France - Domain Driven Design - 2 Dec 2008

ROOT AGGREGATE

est la racine d’un groupe d’objets représentant une unité logique

est une entité permet la définition :

de relations d’appartenance entre les objets du groupe d’opérations impactant plusieurs entités

Page 18: Alt.Net France - Domain Driven Design - 2 Dec 2008

REPOSITORIES

Expose et encapsule les opérations de persistance pour les root aggregates uniquement

Page 19: Alt.Net France - Domain Driven Design - 2 Dec 2008

REPOSITORIES

Ex:

Page 20: Alt.Net France - Domain Driven Design - 2 Dec 2008

SERVICES

Regroupe les opérations qui n’appartiennent pas à un object spécifique

Agit souvent sur plusieurs objets du modèle Stateless

Recommendations: ne pas exposer de couplage avec la couche infrastructure

Page 21: Alt.Net France - Domain Driven Design - 2 Dec 2008

SERVICES

Ex:

Page 22: Alt.Net France - Domain Driven Design - 2 Dec 2008

UNE VUE D’ENSEMBLE

Page 23: Alt.Net France - Domain Driven Design - 2 Dec 2008

AUTRES PRATIQUES CLEFS

Intention Revealing Interfaces : Principle of least surprise:

lisibilité des signatures, des intentions

Refactoring : le modèle doit toujours représenter le savoir

Validation Ne pas dupliquer la logique, maintenir l’intégrité du domaine

Mapping Objet-Relationnel Plus besoin d’écrire du SQL

Dependency Injection – Inversion of Control Plus besoin d’instancier ses dépendances, il suffit de les

exposer

Page 24: Alt.Net France - Domain Driven Design - 2 Dec 2008

POUR ALLER PLUS LOIN: