Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 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
  2. 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
  3. 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 ...
  4. /** * @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){...}
  5. 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 ... ...
  6. Un cas concret Seul un conférencier peut modifier une conférence

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

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

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

    = (new EstConferencier) ->or(new EstAdmin) ->or(new EstResponsableDeSalle); if($spec->isSatisfedBy($user) { .... }
  10. 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) { .... }
  11. • 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
  12. Je suis disponible après la conférence pour vous montrer :

    • vrai code source • sur de vrais projets • orienté Domain Driven Design