SlideShare une entreprise Scribd logo
1  sur  90
Télécharger pour lire hors ligne
@cyriux   @arollafr
Tour d’horizon
Domain-Driven
   Design
 Retour sur un projet récent
http://fr.gta.wikia.com/wiki/Easter_Eggs
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
http://www.virtual-genius.com/blog/post/Domain-Driven-Design-Immersion-Course-e280
Seniors Developers




http://www.thisisio.ie/blog/article/149/hiring_senior_developer
I.   Putting the
     model to work
II. Building
    blocks
    (Tactical
    DDD)
III. Refactoring
     toward
     deeper insight
IV. Strategic DDD
DDD + BDD +TDD
    = VERY GOOD
    FRIENDS!




http://www.alicia-logic.com/capspages/caps_viewall.asp?titleid=16
Très respecté
 Souvent Dénaturé
Sans outillage
  spécifique
CQRS: + populaire
Ambition
Objectif ambitieux
  Grosse attente
     sponsor
   Gros legacy
?
http://www.ratemyfunnypictures.com/index.php/8148/rate-my-one-at-a-time/
Agree on Maxims


      “One at-a-time”
Visualize!
                                          Metaphors!




http://staff.bath.ac.uk/enssa/LPDev.htm
Asset Capture
                                  Transmission

                                           Echappement



                                                  Moteur

         1 seul concept d’intervention : “moteur”

http://martinfowler.com/bliki/AssetCapture.html
Strangler
 application
    Un nouveau moteur qui étranglera
        progressivement l’ancien




http://martinfowler.com/bliki/StranglerApplication.html
http://www.flickr.com/photos/louisfoecy/4114597043
Plan d’action
1 seul concept d’intervention : “produits financiers”
  Strangler application sur ce concept seulement
       Tout le reste : on garde sans modifier
Et maintenant

DU *VRAI* MODEL-DRIVEN
DESIGN
Au commencement :

      UNE CURIOSITÉ SINCÈRE
      POUR LE MÉTIER

http://jnchaintreuil.com/et-si-le-futur-appartenait-aux-curieux/
Changement culturel
     • Le métier c’est cool
     • Passer à la vitesse supérieure




http://rumors.automobilemag.com/feature-flick-2012-porsche-911-7-speed-
Investir dans la connaissance
             métier




 Mini-training
30mn bi-hebdo
Accès à un expert du sujet




http://bakchich-old.static.ddz.fr/IMG/jpg_expert-2.jpg
Proxys d’experts métier




http://fr.m.wikipedia.org/wiki/Fichier:Crocodile_warning_sign_02.svg
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-
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
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
Our
   brain is a
   compiler



CC: Gaetan Lee / http://en.wikipedia.org/wiki/File:Chimp_Brain_in_a_jar.jpg
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 !
Invariants
« Le marché des instruments dérivés est
  à somme nulle »


  Σ Cash Flows   (toutes les contreparties)   =0
Agile ➜ Confiance

Mais pas dans les documents
           texte !
MS Word Docs Vs. POC’s




            Vs.



       http://www.hacknmod.com/wp-content/uploads/2008/12/
MS Word Docs Vs. POC’s




                   Vs.

  Oublis     Contradictions   Si ça marche
essentiels                      pas ça se
                                  voit !
Codeanalysis
   • Modéliser, en code
   • Bloc-notes exécutable
   • Domain-Model-first
   • Antidote Analysis Paralysis (Greg
     Young)
   • Spike isolé, jetable (ou non)
   • Deliberate Discovery (Dan North)

http://codebetter.com/gregyoung/tag/analysis/
http://dannorth.net/2010/08/30/introducing-deliberate-discovery/
*NOT* UML/MDA!




http://depinfo.u-cergy.fr/projets/close2u/fr/tag/uml/
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
Code = Medium
• Raconte le métier
• Auto-formation métier
• Auto-formation patterns aussi :




• Export documentation de référence
  métier (Doclet)
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
Avantages


• Spécifications minces
  • Efficacité du langage partagé
  • Plus d’autonomie des développeurs / testeurs
  • Moins de malentendus




                                                   43
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
• Plus de valeur livrée
     • Initiatives développeurs :
         «et si... ?»

     • Motivation des
         développeurs brillants




http://www.flickr.com/photos/8681025@N03/3249399322/
En code...




             46
Immutable

   Enum


                 No getter/
                   setter


            « DayShift by -2
            WORKING days »
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/
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 !
Value Object




   Equality by
     value
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
Value Object
// foreach(numberOfDays)
Entities
Défini par une
identité
arbitraire

Notion de
continuité dans
le temps
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
Services

      Ni une valeur ni une
      entité




http://www.andeka.co.cc/2011/07/postbox-251.html
Module (lib)
                              <<ValueObject>>
                                   <<ValueObje
           <<ValueObject>>
              <<ValueObje              ct
                <<ValueObje
                  ct ct




                               <<Service>>
                                <<SPI>>
             <<Service>>
Module        <<API>>
                                                 Accès aux
  ==                                              services
library        <<Entity>>
                                                 extérieurs
              <<Aggregate>>
Module
   ==
 library




Accès aux
 services
extérieurs
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
En gros
• DDD : façon d’aborder
  les problèmes +
  solutions


  •Focus sur le métier
  •Focus sur le langage
   du métier
AMBITIEUX == DANGEREUX
Big Bang == Big Fail
                       From Scratch == Casse-Gueule

    !Stabilisation
    !Maturation
    !Retour des
     bugs
     historiques




http://www.sciencesortof.com/2011/05/episode-84-the-big-
Fort besoin d’un filet de tests
           complet




         BDD
Stratégie de tests

                      “10
                      overall”




                     “10% of unit
                     tests
                     number”


                      “1000’s of
                      unit
                      tests”
Stratégie de tests

   Blackbox                  “10
                             overall”




                            “10% of unit
                            tests
                            number”
Whitebox
                             “1000’s of
                             unit
                             tests”
En pratique
Junit




                                      Predefined
                                      implementations of
                                      the external service:
                                      total control of
                                      scenario data

        http://greenarrow.deviantart.com/art/The-Flash-Wally-West-35885287
•Face to face IRL
 (travel)
 •Telephone
 •Chat
 •Email

http://nw.wea.org.uk/blogs/extending_learning_coversations.php
3 amigos



                  BA Dev Tester
http://sanslignebleue.files.wordpress.com/2010/02/3-amigos.jpg
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 |
http://nxadm.wordpress.com/tag/bug/
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 
INTÉGRATION & LEGACY
Plus facile à intégrer par
      construction



         lib sur-mesure
Hexagonal Architecture
                      Depends on
                       nothing




http://pragprog.com/magazines/2009-12/going-naked
Hexagonal Architecture
Hexagonal Architecture
Adapters




                    Scenario
                    test data
INTÉGRATION & LEGACY
Bounded Contexts!
“The delimited applicability of a particular
model”     Context Y




                             Same concept
                              • Different contexts
                              • Different focus
Context X
                              • => Different models
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
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
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
Contexts & mappers

                             Risk
                        <<legacy>>


Trading
<<legacy>>
                                       Cash-flows
                                          <<strangler>>
                    CRUD
                  <<legacy POJO>>



             Hibernate ORM              Non
                                        DDD
                                     (anémique)
                         DB
                      <<legacy>>
Multiple Models
       ≠ Duplication
                             Risk
                        <<legacy>>


Trading
<<legacy>>
                                       Cash-flows
                                          <<strangler>>
                    CRUD
                  <<legacy POJO>>



             Hibernate ORM              Non
                                        DDD
                                     (anémique)
                         DB
                      <<legacy>>
Adapter = Shock
                        Absorber DDD: Anti-
                                   Corruption
                                                                                         Layer




http://www.directindustry.com/prod/herwarth-reich/flexible-couplings-elastic-couplings-19991-374565.html
Adapter = Shock
                        Absorber




http://www.directindustry.com/prod/herwarth-reich/flexible-couplings-elastic-couplings-19991-374565.html
Adapter = Shock
                        Absorber




http://www.directindustry.com/prod/herwarth-reich/flexible-couplings-elastic-couplings-19991-374565.html
Merci !




http://cathy313.centerblog.net/539-bisounours
Vos questions
@cyriux   @arollafr

Contenu connexe

Similaire à Tour d'horizon de Domain-Driven Design Avril 2012 autour d'un retour d'expérience - Aroll@fterwork Arolla

La Duck Conf - Qui maîtrise le mieux le chaos de votre SI ? Mozart ou Béjart ?
La Duck Conf - Qui maîtrise le mieux le chaos de votre SI ? Mozart ou Béjart ? La Duck Conf - Qui maîtrise le mieux le chaos de votre SI ? Mozart ou Béjart ?
La Duck Conf - Qui maîtrise le mieux le chaos de votre SI ? Mozart ou Béjart ? OCTO Technology
 
Evolution des méthodes_d'analyse_des_projets_d'investissement
Evolution des méthodes_d'analyse_des_projets_d'investissementEvolution des méthodes_d'analyse_des_projets_d'investissement
Evolution des méthodes_d'analyse_des_projets_d'investissementmidossay
 
Wjgtll 7 romain berrendonner
Wjgtll 7 romain berrendonnerWjgtll 7 romain berrendonner
Wjgtll 7 romain berrendonnergtll_systematic
 
6.valorisation internet
6.valorisation internet6.valorisation internet
6.valorisation internetBen69350
 
AOP.pptx
AOP.pptxAOP.pptx
AOP.pptxManalAg
 
Project Management Introduction (2/5) for Gobelins students
Project Management Introduction (2/5) for Gobelins studentsProject Management Introduction (2/5) for Gobelins students
Project Management Introduction (2/5) for Gobelins studentsEric DI POL
 
Collatéral_Management.pdf
Collatéral_Management.pdfCollatéral_Management.pdf
Collatéral_Management.pdfbadrfathallah2
 
2 relation-acteurs-projet
2 relation-acteurs-projet2 relation-acteurs-projet
2 relation-acteurs-projetbriann_guillaud
 
Octopus logiciel de microfinance open source
Octopus logiciel de microfinance open sourceOctopus logiciel de microfinance open source
Octopus logiciel de microfinance open sourcevincent.biot
 
Pilotage des Cautions Bancaires
Pilotage des Cautions BancairesPilotage des Cautions Bancaires
Pilotage des Cautions BancairesSage france
 
1.1-Cours de Géniel Logiciel
1.1-Cours de Géniel Logiciel 1.1-Cours de Géniel Logiciel
1.1-Cours de Géniel Logiciel lauraty3204
 
1-Cours de Géniel Logiciel
1-Cours de Géniel Logiciel1-Cours de Géniel Logiciel
1-Cours de Géniel Logiciellauraty3204
 
L'open source professionnel - un business model open source
L'open source professionnel - un business model open sourceL'open source professionnel - un business model open source
L'open source professionnel - un business model open sourceStefane Fermigier
 
Formation Stratégie Delta One
Formation Stratégie Delta OneFormation Stratégie Delta One
Formation Stratégie Delta OneActions-Finance
 
Retour d'expérience Caisse des Dépôts - 31-03-2015
Retour d'expérience Caisse des Dépôts - 31-03-2015Retour d'expérience Caisse des Dépôts - 31-03-2015
Retour d'expérience Caisse des Dépôts - 31-03-2015Assima
 
Besoin de financement
Besoin de financementBesoin de financement
Besoin de financementInès Lin
 
Le marché des changes : Comprendre les acteurs et les outils du marché des ch...
Le marché des changes : Comprendre les acteurs et les outils du marché des ch...Le marché des changes : Comprendre les acteurs et les outils du marché des ch...
Le marché des changes : Comprendre les acteurs et les outils du marché des ch...tdiouf
 

Similaire à Tour d'horizon de Domain-Driven Design Avril 2012 autour d'un retour d'expérience - Aroll@fterwork Arolla (20)

ISGValorisationsV0
ISGValorisationsV0ISGValorisationsV0
ISGValorisationsV0
 
La Duck Conf - Qui maîtrise le mieux le chaos de votre SI ? Mozart ou Béjart ?
La Duck Conf - Qui maîtrise le mieux le chaos de votre SI ? Mozart ou Béjart ? La Duck Conf - Qui maîtrise le mieux le chaos de votre SI ? Mozart ou Béjart ?
La Duck Conf - Qui maîtrise le mieux le chaos de votre SI ? Mozart ou Béjart ?
 
Evolution des méthodes_d'analyse_des_projets_d'investissement
Evolution des méthodes_d'analyse_des_projets_d'investissementEvolution des méthodes_d'analyse_des_projets_d'investissement
Evolution des méthodes_d'analyse_des_projets_d'investissement
 
Wjgtll 7 romain berrendonner
Wjgtll 7 romain berrendonnerWjgtll 7 romain berrendonner
Wjgtll 7 romain berrendonner
 
6.valorisation internet
6.valorisation internet6.valorisation internet
6.valorisation internet
 
Target costing
Target costingTarget costing
Target costing
 
Agile Tour 2016 @ Lille
Agile Tour 2016 @ LilleAgile Tour 2016 @ Lille
Agile Tour 2016 @ Lille
 
AOP.pptx
AOP.pptxAOP.pptx
AOP.pptx
 
Project Management Introduction (2/5) for Gobelins students
Project Management Introduction (2/5) for Gobelins studentsProject Management Introduction (2/5) for Gobelins students
Project Management Introduction (2/5) for Gobelins students
 
Collatéral_Management.pdf
Collatéral_Management.pdfCollatéral_Management.pdf
Collatéral_Management.pdf
 
2 relation-acteurs-projet
2 relation-acteurs-projet2 relation-acteurs-projet
2 relation-acteurs-projet
 
Octopus logiciel de microfinance open source
Octopus logiciel de microfinance open sourceOctopus logiciel de microfinance open source
Octopus logiciel de microfinance open source
 
Pilotage des Cautions Bancaires
Pilotage des Cautions BancairesPilotage des Cautions Bancaires
Pilotage des Cautions Bancaires
 
1.1-Cours de Géniel Logiciel
1.1-Cours de Géniel Logiciel 1.1-Cours de Géniel Logiciel
1.1-Cours de Géniel Logiciel
 
1-Cours de Géniel Logiciel
1-Cours de Géniel Logiciel1-Cours de Géniel Logiciel
1-Cours de Géniel Logiciel
 
L'open source professionnel - un business model open source
L'open source professionnel - un business model open sourceL'open source professionnel - un business model open source
L'open source professionnel - un business model open source
 
Formation Stratégie Delta One
Formation Stratégie Delta OneFormation Stratégie Delta One
Formation Stratégie Delta One
 
Retour d'expérience Caisse des Dépôts - 31-03-2015
Retour d'expérience Caisse des Dépôts - 31-03-2015Retour d'expérience Caisse des Dépôts - 31-03-2015
Retour d'expérience Caisse des Dépôts - 31-03-2015
 
Besoin de financement
Besoin de financementBesoin de financement
Besoin de financement
 
Le marché des changes : Comprendre les acteurs et les outils du marché des ch...
Le marché des changes : Comprendre les acteurs et les outils du marché des ch...Le marché des changes : Comprendre les acteurs et les outils du marché des ch...
Le marché des changes : Comprendre les acteurs et les outils du marché des ch...
 

Plus de Cyrille Martraire

Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)
Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)
Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)Cyrille Martraire
 
Sunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverSunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverCyrille Martraire
 
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...Cyrille Martraire
 
Bounded Context - DDD Europe Foundation Track
Bounded Context - DDD Europe Foundation TrackBounded Context - DDD Europe Foundation Track
Bounded Context - DDD Europe Foundation TrackCyrille Martraire
 
Domain Modeling towards First Principles
Domain Modeling towards First PrinciplesDomain Modeling towards First Principles
Domain Modeling towards First PrinciplesCyrille Martraire
 
DDD beyond the infamous repository pattern - GeeCon Prague 2018
DDD beyond the infamous repository pattern - GeeCon Prague 2018DDD beyond the infamous repository pattern - GeeCon Prague 2018
DDD beyond the infamous repository pattern - GeeCon Prague 2018Cyrille Martraire
 
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...Cyrille Martraire
 
Refactor your Specs - 2017 Edition
Refactor your Specs - 2017 EditionRefactor your Specs - 2017 Edition
Refactor your Specs - 2017 EditionCyrille Martraire
 
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...Cyrille Martraire
 
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...Cyrille Martraire
 
Legacy Code: Evolve or Rewrite?
Legacy Code: Evolve or Rewrite?Legacy Code: Evolve or Rewrite?
Legacy Code: Evolve or Rewrite?Cyrille Martraire
 
Ur Domain Haz Monoids DDDx NYC 2014
Ur Domain Haz Monoids DDDx NYC 2014Ur Domain Haz Monoids DDDx NYC 2014
Ur Domain Haz Monoids DDDx NYC 2014Cyrille Martraire
 
Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013Cyrille Martraire
 
I T.A.K.E. talk: "When DDD meets FP, good things happen"
I T.A.K.E. talk: "When DDD meets FP, good things happen"I T.A.K.E. talk: "When DDD meets FP, good things happen"
I T.A.K.E. talk: "When DDD meets FP, good things happen"Cyrille Martraire
 

Plus de Cyrille Martraire (16)

Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)
Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)
Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)
 
Sunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverSunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft Forever
 
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
 
Bounded Context - DDD Europe Foundation Track
Bounded Context - DDD Europe Foundation TrackBounded Context - DDD Europe Foundation Track
Bounded Context - DDD Europe Foundation Track
 
Domain Modeling towards First Principles
Domain Modeling towards First PrinciplesDomain Modeling towards First Principles
Domain Modeling towards First Principles
 
DDD beyond the infamous repository pattern - GeeCon Prague 2018
DDD beyond the infamous repository pattern - GeeCon Prague 2018DDD beyond the infamous repository pattern - GeeCon Prague 2018
DDD beyond the infamous repository pattern - GeeCon Prague 2018
 
DDD for real
DDD for realDDD for real
DDD for real
 
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...
 
Refactor your Specs - 2017 Edition
Refactor your Specs - 2017 EditionRefactor your Specs - 2017 Edition
Refactor your Specs - 2017 Edition
 
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...
 
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
 
Legacy Code: Evolve or Rewrite?
Legacy Code: Evolve or Rewrite?Legacy Code: Evolve or Rewrite?
Legacy Code: Evolve or Rewrite?
 
Ur Domain Haz Monoids DDDx NYC 2014
Ur Domain Haz Monoids DDDx NYC 2014Ur Domain Haz Monoids DDDx NYC 2014
Ur Domain Haz Monoids DDDx NYC 2014
 
Ur Domain Haz Monoids
Ur Domain Haz MonoidsUr Domain Haz Monoids
Ur Domain Haz Monoids
 
Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013
 
I T.A.K.E. talk: "When DDD meets FP, good things happen"
I T.A.K.E. talk: "When DDD meets FP, good things happen"I T.A.K.E. talk: "When DDD meets FP, good things happen"
I T.A.K.E. talk: "When DDD meets FP, good things happen"
 

Tour d'horizon de Domain-Driven Design Avril 2012 autour d'un retour d'expérience - Aroll@fterwork Arolla

  • 1. @cyriux @arollafr
  • 2. Tour d’horizon Domain-Driven Design Retour sur un projet récent
  • 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
  • 5.
  • 6.
  • 9. I. Putting the model to work II. Building blocks (Tactical DDD) III. Refactoring toward deeper insight IV. Strategic DDD
  • 10. DDD + BDD +TDD = VERY GOOD FRIENDS! http://www.alicia-logic.com/capspages/caps_viewall.asp?titleid=16
  • 11. Très respecté Souvent Dénaturé Sans outillage spécifique CQRS: + populaire
  • 13.
  • 14.
  • 15. Objectif ambitieux Grosse attente sponsor Gros legacy
  • 16. ?
  • 18. Agree on Maxims “One at-a-time”
  • 19. Visualize! Metaphors! http://staff.bath.ac.uk/enssa/LPDev.htm
  • 20. Asset Capture Transmission Echappement Moteur 1 seul concept d’intervention : “moteur” http://martinfowler.com/bliki/AssetCapture.html
  • 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
  • 23. Et maintenant DU *VRAI* MODEL-DRIVEN DESIGN
  • 24. Au commencement : UNE CURIOSITÉ SINCÈRE POUR LE MÉTIER http://jnchaintreuil.com/et-si-le-futur-appartenait-aux-curieux/
  • 25. Changement culturel • Le métier c’est cool • Passer à la vitesse supérieure http://rumors.automobilemag.com/feature-flick-2012-porsche-911-7-speed-
  • 26. Investir dans la connaissance métier Mini-training 30mn bi-hebdo
  • 27. Accès à un expert du sujet http://bakchich-old.static.ddz.fr/IMG/jpg_expert-2.jpg
  • 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
  • 35. Agile ➜ Confiance Mais pas dans les documents texte !
  • 36. MS Word Docs Vs. POC’s Vs. http://www.hacknmod.com/wp-content/uploads/2008/12/
  • 37. MS Word Docs Vs. POC’s Vs. Oublis Contradictions Si ça marche essentiels pas ça se voit !
  • 38. Codeanalysis • Modéliser, en code • Bloc-notes exécutable • Domain-Model-first • Antidote Analysis Paralysis (Greg Young) • Spike isolé, jetable (ou non) • Deliberate Discovery (Dan North) http://codebetter.com/gregyoung/tag/analysis/ http://dannorth.net/2010/08/30/introducing-deliberate-discovery/
  • 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 !
  • 50. Value Object Equality by value
  • 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
  • 57. Module (lib) <<ValueObject>> <<ValueObje <<ValueObject>> <<ValueObje ct <<ValueObje ct ct <<Service>> <<SPI>> <<Service>> Module <<API>> Accès aux == services library <<Entity>> extérieurs <<Aggregate>>
  • 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-
  • 63. Fort besoin d’un filet de tests complet BDD
  • 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 
  • 73. Plus facile à intégrer par construction lib sur-mesure
  • 74. Hexagonal Architecture Depends on nothing http://pragprog.com/magazines/2009-12/going-naked
  • 76. Hexagonal Architecture Adapters Scenario test data
  • 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>>
  • 83. Multiple Models ≠ Duplication Risk <<legacy>> Trading <<legacy>> Cash-flows <<strangler>> CRUD <<legacy POJO>> Hibernate ORM Non DDD (anémique) DB <<legacy>>
  • 84. Adapter = Shock Absorber DDD: Anti- Corruption Layer http://www.directindustry.com/prod/herwarth-reich/flexible-couplings-elastic-couplings-19991-374565.html
  • 85. Adapter = Shock Absorber http://www.directindustry.com/prod/herwarth-reich/flexible-couplings-elastic-couplings-19991-374565.html
  • 86. Adapter = Shock Absorber http://www.directindustry.com/prod/herwarth-reich/flexible-couplings-elastic-couplings-19991-374565.html
  • 87.
  • 90. @cyriux @arollafr