$30 off During Our Annual Pro Sale. View Details »

Concevoir une architecture pilotée par le métier

Concevoir une architecture pilotée par le métier

Présentation donnée au Blend Web Mix sur le développement piloté par le comportement et le Domain Driven Design

Jean-François Lépine

October 29, 2014
Tweet

More Decks by Jean-François Lépine

Other Decks in Programming

Transcript

  1. Concevoir une architecture
    par le métier
    pilotée
    @Halleck45

    View Slide

  2. Jean-François Lépine
    Consultant Industrialisation & PHP
    Auteur de www.phpmetrics.org
    http://blog.lepine.pro
    @Halleck45

    View Slide

  3. Un projet
    informatique

    View Slide

  4. Levez la main !
    A. Facile
    B. Pas simple mais bon
    C. Inacceptable en cours
    de projet
    D. ***** de client qui ne
    sait pas ce qu'il veut !
    Le changement c'est :
    © www.commitstrip.com

    View Slide

  5. Indispensable

    View Slide

  6. Délivrer
    Concevoir
    Communiquer
    DevOps
    Conception pilotée par
    le métier
    Développement piloté par le
    comportement

    View Slide

  7. Communiquer
    Développement piloté par le Comportement

    View Slide

  8. UBIQUITOUS
    LANGAGE
    Permet d'éviter les ambiguïtés
    Est élaborée en commun
    Est parlée par tous
    Représente un glossaire du projet

    View Slide

  9. Décrire un besoin ...
    Fonctionnalité : Assister à une conférence aux Web Blend Mix
    En tant que visiteur
    Afin de me tenir informé de l'actualité du web
    Je peux assister à de supers conférences
    Scénario : écouter une conférence sur place
    Étant donné que je suis présent au salon Blend Web Mix
    Quand je rentre dans la salle Gratte Ciel à 10h30
    Alors je vois Jean-François en train de parler sur l'estrade
    Scénario : écouter une conférence en streaming
    ...

    View Slide

  10. Bonus :
    les tests automatisés

    View Slide

  11. /**
    * @Given /^que je suis présent au salon Web Blend Mix$/
    */
    public function queJeSuisPresentAuSalonWebBlendMix(){...}
    /**
    * @Given /^je rentre dans la salle ([^"]*) à ([^"]*)$/
    */
    public function jeRentreDansA($room, $hour){...}
    /**
    * @Given /^je vois ([^"]*) en train de parler sur l'estrade$/
    */
    public function jeVoisEnTrainDeParlerSurLEstrade($name){...}

    View Slide

  12. Concevoir
    Domain Driven Design

    View Slide

  13. Qualité
    postulat de
    démarche de
    recherche de

    View Slide

  14. L'implémentation
    est le reflet exact du
    besoin fonctionnel

    View Slide

  15. En s'appuyant sur des design patterns

    View Slide

  16. En isolant les couches
    Consommation
    Présentation
    Application
    Domaine métier
    Infrastructure
    Tests IHM
    Tests unitaires
    Tests de protocole
    Tests de comportement
    Tests unitaires
    Analyse statique
    Tests unitaires
    Tests d'intégration
    PhantomCSS, Huxley, Wraight
    QUNIT, Jasmine, Karma
    Schémas (JSON, DTD)
    Behat, Cucumber, Species
    PHPUnit, Atoum
    PHPMEtrics, PDepend
    PHPUnit, Atoum
    Bash...
    Composants graphiques
    Vues HTML
    View Objects
    Middleware
    Contrôlleurs
    ACL Layer
    Services
    Interfaces
    Entités
    Persistence
    Logs
    ...
    ...

    View Slide

  17. Par exemple...
    Consommation
    Présentation
    Application
    Domaine métier
    Infrastructure
    AngularJS
    HAL
    Symfony2 framework
    PHP
    Symfony2 component

    View Slide

  18. Atome fonctionnel
    POO, KISS, SOLID
    En atomisant les comportements

    View Slide

  19. Un cas concret
    Seul un conférencier peut modifier une conférence
    if($user->type == 'conferencier') { .... }

    View Slide

  20. FAIL !
    Seul un conférencier peut modifier une conférence
    if($user->type == 'conferencier') { .... }

    View Slide

  21. Un cas concret
    Seul un conférencier peut modifier une conférence
    $spec = (new EstConferencier) ;
    if($spec->isSatisfedBy($user) { .... }

    View Slide

  22. Un cas concret
    Ah, et les admin aussi
    $spec = (new EstConferencier)
    ->or(new EstAdmin);
    if($spec->isSatisfedBy($user) { .... }

    View Slide

  23. Un cas concret
    Et les responsable de salles aussi
    $spec = (new EstConferencier)
    ->or(new EstAdmin)
    ->or(new EstResponsableDeSalle);
    if($spec->isSatisfedBy($user) { .... }

    View Slide

  24. Un cas concret
    Oui oui bien sûr : il faut avoir activé son compte
    $spec = (new EstConferencier)
    ->or(new EstAdmin)
    ->or(new EstResponsableDeSalle)
    ->and(new LeCompteEstActif);
    if($spec->isSatisfedBy($user) { .... }

    View Slide

  25. Conclusion

    View Slide


  26. Il existe (pour de vrai) des solutions pour concevoir
    des architectures évolutives

    Ces solutions sont coûteuses

    Un postulat : la recherche de Qualité

    Mais une fois qu'on est rôdé... c'est vraiment
    impressionnant

    View Slide

  27. Je suis disponible après la conférence pour vous
    montrer :

    vrai code source

    sur de vrais projets

    orienté Domain Driven Design

    View Slide

  28. Des Questions ?
    merci
    @Halleck45

    View Slide