Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Un projet informatique

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Indispensable

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Communiquer Développement piloté par le Comportement

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Bonus : les tests automatisés

Slide 11

Slide 11 text

/** * @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){...}

Slide 12

Slide 12 text

Concevoir Domain Driven Design

Slide 13

Slide 13 text

Qualité postulat de démarche de recherche de

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

En s'appuyant sur des design patterns

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Atome fonctionnel POO, KISS, SOLID En atomisant les comportements

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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) { .... }

Slide 25

Slide 25 text

Conclusion

Slide 26

Slide 26 text

● 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

Slide 27

Slide 27 text

Je suis disponible après la conférence pour vous montrer : ● vrai code source ● sur de vrais projets ● orienté Domain Driven Design

Slide 28

Slide 28 text

Des Questions ? merci @Halleck45