Vous avez entendu parler de Domain-Driven Design (DDD) et vous voulez en savoir plus ?
Nous vous offrons un tour d'horizon de concepts importants de DDD et leur application en pratique, avec des retours d'un projet récent.
Vidéo de la présentation disponible : http://www.dailymotion.com/video/xq62pf_aroll-fterwork-du-11-avril-domain-driven-design_tech
4. Executive Summary
Domain-Driven Design :
• Priorité au domaine, devant la technique
• Parler le langage du métier, pour tout le
monde, dans le code et dans les tests
• Le code est le modèle (et vice-versa)
• Mon arme secrète sur mes projets depuis
2005
21. Strangler
application
Un nouveau moteur qui étranglera
progressivement l’ancien
http://martinfowler.com/bliki/StranglerApplication.html
http://www.flickr.com/photos/louisfoecy/4114597043
22. Plan d’action
1 seul concept d’intervention : “produits financiers”
Strangler application sur ce concept seulement
Tout le reste : on garde sans modifier
29. Le langage compte!
• La modélisation
commence avec le
langage
• Attentions aux
« synonymes » et aux
mots centraux du métier
• Poser des bonnes
(meilleures) questions
http://journalism.about.com/od/reporting/tp/Finding-And-Developing-Ideas-For-News-Stories-
30. Searching for the Ubiquitous
Language
An instrument is effective for a period of time (its life), that A credit leg observes credit events from some identified
is the date range between the effective date and the expiry instrument and triggers either a physical settlement or to a cash
date settlement.
Typical credit events are bankruptcy, failure to pay, restructuring
Cash Flow
A swap is made of legs, each of them being an independent
instrument on its own. Each leg defines two counterparties Forward and Future means that the effective date is in the future.
The difference between forward and future is that the former is OTC
A payoff is a cash flow given by one counterparty to the whereas the later is cleared, more standard, and involves frequent
other counterparty margin calls (hence a convexity bias between them)
Instruments generate cash flows during their life, in From a legal perspective, an option is the right to exercise some
particular at expiry date (redemption, zero coupon) and at transaction, typically to buy/sell the underlying instrument at a
regular dates predefined strike and volume, or to receive a payoff. Since
There may be a date offset for settlements, fixings and investors are rational, we may also consider options to be essentially
cash flows payments instruments with conditional transaction, in general payoffs
Floating rate devices generate cash flows according to Option styles are typically European (exercise only at expiry
date), American (exercise anytime), Bermuda (exercise at regular
Bank Holiday
observation expressions based on some observable dates), Canary (exercise at regular dates after some date or period)
reference
An underlying instrument is an instrument used to condition the
Fixed rate devices generate cash flows according to a exercise (which may be automatic) and often used to calculate the
predefined coupon amount of the payoff or more that is directly the object of an
Inflation-linked devices modulate the coupon, coupon rate exchange, in the case of an exchange of assets
or notional amount by the variation of some (inflation) Some instruments are subject to conversion, i.e. they can be
observable reference replaced with another instrument
Regular dates may be predefined explicitly as a dates list, or Some instruments involve one, two or no exchange(s) of principal
as repeated dates defined by a period and a time direction (s)
(backward or forward), with stub convention and date Compounding swaps capitalize interests earned for each period
adjustment rules, and according to some holiday calendar payment period
Interest rate
Date adjustment rules are defined by a day roll convention
and a business center
A funding leg is a fixed rate device or a floating rate device
A return leg is a leg that reproduces the exact cash flows of
another instrument
31. Ubiquitous Language
• Nommer
• Facile à chercher
• Prononçables
• Sans abréviation
• Définir
• Définition partagée
• Comprendre, pas juste un vocabulaire
http://scalin.fr/rubrique-technique/glossaire
32. Our
brain is a
compiler
CC: Gaetan Lee / http://en.wikipedia.org/wiki/File:Chimp_Brain_in_a_jar.jpg
33. Invariants, symétries,
On peut déjà refactoriser des
duplications en langage naturel:
• « A chaque date anniversaire, une
obligation paie un coupon »
• « A chaque fin de période, une jambe de
swap paie les intérêts sur la période »
= Un seul scénario !
34. Invariants
« Le marché des instruments dérivés est
à somme nulle »
Σ Cash Flows (toutes les contreparties) =0
40. No Translation:
Code == Model
• Ubiquitous Langage dans le code
• Noms de classes & interfaces
• Noms de méthodes
• Code lisible en prose autant que possible
• ≥ 80% noms de classes &
méthodes lisibles par le
métier
41. Code = Medium
• Raconte le métier
• Auto-formation métier
• Auto-formation patterns aussi :
• Export documentation de référence
métier (Doclet)
42. Exemple d’export
Injecte l'essence et l'aire dans le moteur et passant par le vilebrequin pour le graissage des
PipeAdmission
roulements puis monte dans le cylindre par les transferts
Pièce sur laquelle est fixé le piston qui, grâce à l'explosion descend en faisant tourner le
Vilebrequin vilebrequin, qui fera tourner la roue en passant par l'embrayage et la boîte à vitesse (sur le
ciao, la boîte à vitesse est placée dans la roue arrière
Le rôle de la bougie est de crée un petit arc électrique pour faire exploser, au bout du
Bougie
moteur, le mélange air-essence comprimé par le piston.
Allumage Déclenche l’étincelle dans la bougie
AllumageRupteur : bobine haute-tension pour allumage rustique
AllumageElectronique : circuit électronique haute-tension pour allumage précis
Carter Coque fermée qui contient le vilebrequin
Le cylindre contient les transferts qui amènent l'essence dans la partie entre la fin du
Cylindre cylindre et la culasse où se passe la compression et de la lumière d'échappement (sortie
des gaz vers le pot)
Elément clé du moteur qui subit la pression quand le mélange air-essence explose, il recule
Piston
avec une force équivalente a 2000kg. et fait tourner le vilebrequin qui entraine le reste...
AxePiston l'axe du piston sert à tenir le piston à la bielle.
42
43. Avantages
• Spécifications minces
• Efficacité du langage partagé
• Plus d’autonomie des développeurs / testeurs
• Moins de malentendus
43
44. Avantages
• Economie grâce à la qualité de code:
• pas de traduction : moins de gaspillage
• moins de code (moins de cas particuliers)
• meilleur rapport signal / bruit : lisible
• code auto-documenté : facile à comprendre
• concepts métier assez stables
44
45. • Plus de valeur livrée
• Initiatives développeurs :
«et si... ?»
• Motivation des
développeurs brillants
http://www.flickr.com/photos/8681025@N03/3249399322/
47. Immutable
Enum
No getter/
setter
« DayShift by -2
WORKING days »
48. Code concentré en métier
Dans le
• 100% métier (ou presque) modèle de
domaine
• No framework pollution
• Spring, Hibernate, logger
null
• No javax.*
• No SQL
• Only
http://code.google.com/p/guava-libraries/
49. Value Object
• No particular identity, equality by value
• Fowler patterns: ValueObject, Quantity,
Range
• Immutable
• Constructor / Static Creator / Factory
method Mon choix
• Style FP par défaut,
sauf si
• Side-effect-free vraiment pas
possible !
51. Value Object
• Functional programming style
• Immutable, clone to mutate
• Capture values (snapshot)
• History object of every version
• Builder pour aider à la création
• par exemple :
• String & StringBuilder
55. Aggregates
Une collection d’objets
liés qui partagent une
cohérence ensembles,
avec une entité racine
pour l’identité :
Aggregate Root
http://www.boitearecettes.com/fruits_legumes/raisin-text.htm
56. Services
Ni une valeur ni une
entité
http://www.andeka.co.cc/2011/07/postbox-251.html
58. Module
==
library
Accès aux
services
extérieurs
59. Façade sur le legacy
• Tout le code ne <<ACL>>
mérite pas la même <<Facade>>
attention et n'a pas
vocation à être
repris!
• Dette technique
seulement si on paie
des intérêts
60. En gros
• DDD : façon d’aborder
les problèmes +
solutions
•Focus sur le métier
•Focus sur le langage
du métier
62. Big Bang == Big Fail
From Scratch == Casse-Gueule
!Stabilisation
!Maturation
!Retour des
bugs
historiques
http://www.sciencesortof.com/2011/05/episode-84-the-big-
64. Stratégie de tests
“10
overall”
“10% of unit
tests
number”
“1000’s of
unit
tests”
65. Stratégie de tests
Blackbox “10
overall”
“10% of unit
tests
number”
Whitebox
“1000’s of
unit
tests”
66. En pratique
Junit
Predefined
implementations of
the external service:
total control of
scenario data
http://greenarrow.deviantart.com/art/The-Flash-Wally-West-35885287
67. •Face to face IRL
(travel)
•Telephone
•Chat
•Email
http://nw.wea.org.uk/blogs/extending_learning_coversations.php
68. 3 amigos
BA Dev Tester
http://sanslignebleue.files.wordpress.com/2010/02/3-amigos.jpg
69. DONE criteria : DONE!
Given a floating rate bond on EURIBOR 3M
And a nominal of 15M EUR
And an issue date of 2011/06/15
And an end date of 2012/06/14
And an SEMI_ANNUAL calculation period
When the EURIBOR 3M evolves:
| 2011/09/15 | 3.5% |
| 2012/03/15 | 4.0% |
Then the cash-flows are:
| 2011/12/13 | 23000 |
| 2012/06/14 | 25500 |
71. Remarques
• GUI & DB testing
• BDD scénarios & BA
• Faire générique
(cross-asset) moins
expressif
• DDD difficile à
expliquer, avancer
couvert, montrer les
bénéfices
78. Bounded Contexts!
“The delimited applicability of a particular
model” Context Y
Same concept
• Different contexts
• Different focus
Context X
• => Different models
79. Context Game
“What's your ideal <customer>?”
• sales : il a beaucoup d’argent et beaucoup
d’envies
• marketing : il aime notre produit et il le dit
à tout le monde sur les réseaux sociaux
• shipping : il habite à coté de l’entrepôt et
est toujours chez lui
• facturation : il paie d’avance sans
sourciller même si le produit n’est pas en
stock
80. Context Game
“What's your ideal <instrument>?”
• pre-trade : il est très liquide avec un faible
écart entre bid et offer
• trading : il a un identifiant unique et
uniforme facile à saisir
• risk : il est risqué sur un seul facteur de
risque
• back-office : il a peu de cash-flows et les
cash-flows sont certains et connus
longtemps avant
81. Context Game
“What's your ideal <instrument>?”
• pre-trade : il est très liquide avec un faible
écart entre bid et offer
• trading : il a un identifiant unique et
uniforme facile à saisir
• risk : il est risqué sur un seul facteur de
risque
• back-office : il a peu de cash-flows et les
cash-flows sont certains et connus
longtemps avant
82. Contexts & mappers
Risk
<<legacy>>
Trading
<<legacy>>
Cash-flows
<<strangler>>
CRUD
<<legacy POJO>>
Hibernate ORM Non
DDD
(anémique)
DB
<<legacy>>