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

Cad0f293595fc534e4ebd1eb7e3f1a1a?s=128

Jean-François Lépine

October 29, 2014
Tweet

Transcript

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

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

    @Halleck45
  3. Un projet informatique

  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
  5. Indispensable

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

    piloté par le comportement
  7. Communiquer Développement piloté par le Comportement

  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
  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 ...
  10. Bonus : les tests automatisés

  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){...}
  12. Concevoir Domain Driven Design

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

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

  15. En s'appuyant sur des design patterns

  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 ... ...
  17. Par exemple... Consommation Présentation Application Domaine métier Infrastructure AngularJS HAL

    Symfony2 framework PHP Symfony2 component
  18. Atome fonctionnel POO, KISS, SOLID En atomisant les comportements

  19. Un cas concret Seul un conférencier peut modifier une conférence

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

    == 'conferencier') { .... }
  21. Un cas concret Seul un conférencier peut modifier une conférence

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

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

    = (new EstConferencier) ->or(new EstAdmin) ->or(new EstResponsableDeSalle); if($spec->isSatisfedBy($user) { .... }
  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) { .... }
  25. Conclusion

  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
  27. Je suis disponible après la conférence pour vous montrer :

    • vrai code source • sur de vrais projets • orienté Domain Driven Design
  28. Des Questions ? merci @Halleck45