Retour sur la soirée design pattern et anti pattern en PHP

Présentation théorique des design pattern

La soirée a débuté par une présentation théorique des design pattern par Julien Pauli, avec définition de ce qu'est un design pattern :

Un patron de conception (design pattern) est un arrangement caractéristique de modules, reconnu comme bonne pratique en réponse à un problème de conception d'un logiciel. Il décrit une solution standard, utilisable dans la conception de différents logiciels.

Puis des principes SOLID sur lesquels sont basés les design pattern :

  • Single responsability : pas trop de responsabilité pour une seule classe
  • Open/Close Principle : ouvert à l’extension, fermé à la modification
  • Liskov Substitution : un objet peut utiliser le fils de A sans s’en rendre compte (Héritage strict, et type conservé)
  • Dependecy Injection : Si un objet A a besoin d’un objet B , ce dernier doit lui être injecté, il ne doit pas aller le chercher lui-même (donc pas de new Toto à l’intérieur d’une classe)
  • Interface aggregation : A ne doit pas utiliser B directement mais une interface de B

Après quoi Julien a présenté quelques exemples de design pattern comme :

  • le Singleton : restreindre l'instanciation d'une classe à un seul objet. Ce design pattern se révèle être en fait être un anti pattern car le Singleton ne peut être mocké pour les tests.
  • L’Observateur/Sujet : le sujet envoie un signal à des modules qui jouent le rôle d'observateurs sur certains événements. Ce design pattern est  utilisé par exemple pour le principe de plugins dans Joomla.
  • Le médiateur : quand un objet central contrôle un flux de messages
  • Le décorateur : permet d'attacher dynamiquement de nouvelles responsabilités à un objet ce qui permet de résoudre la problématique de l’héritage multiple.
  • L’itérateur : qui redéfinit la manière dont PHP parcourt un objet. Ce design pattern est par exemple utilisé par le composant Zend_Paginator de Zend Framework

(Anti pattern : fausse bonne idée, quand une solution génère plus de problème qu’elle n’en résout.)

 

Les design pattern en pratique

Voilà pour la théorie, Hugo Hamon a ensuite enchaîné par des exemples concrets d’utilisation des ces design pattern.

Hugo a commencé par présenter l’utilisation du design Pattern Observateur dans le composant Symfony Event Dispatcher, en détaillant la mise en place des écouteurs et du Sujet dans le cas concret de modification d’un article.

Il a ensuite détaillé l’utilisation du design pattern Injection de dépendances, en commençant par montrer en quoi la non-utilisation de ce pattern pouvait devenir gênante en prenant un cas simple d’envoi  de mail. Le code présenté était fonctionnel, mais pas évolutif, et il n’incluait pas de possibilité de modification de paramètres selon un environnement différent.

La mise en place d’un code respectant l’injection de dépendances impliquait un découplage avec les interfaces et une  construction un peu plus complexe, mais qui permettait des évolutions et des utilisations différentes selon l’environnement.

Hugo a ensuite rapidement évoqué l’utilisation de Pimple pour simplifier cette utilisation de l’injection de dépendances.

Pour cette deuxième partie je vous renvoie vivement à ses slides accessible sur https://speakerdeck.com/u/hhamon/p/design-patterns-avec-php-53-symfony-et-pimple

 

Retour d'expériences sur le design pattern Façade

La conférence s’est terminée sur un retour d’expériences de Theodo par Fabrice Bernard avec l’utilisation du design pattern Façade dans le cadre de reprise d’un site existant.

Le design pattern Façade permet en fait de simplifier une interface complexe. L’équipe de Theodo a donc utilisé ce design pattern pour  faire communiquer un ancien modèle comportant une partie modèle fortement couplée avec leurs nouveaux modules. Ils ont en fait procédé en deux couches :

Il ont d’abord mis une première façade composée de trois modèles communiquant entre eux (User, Match, Bar)  qui communiquait avec le modèle existant, puis ils ont mis une deuxième façade, composée de modules plus fins (un module par fonctionnalité), qui communique avec cette première façade. Cette conception a permis de conserver l’existant et ses fonctionalités tout en ajoutant de nouvelles fonctions sur un modèle plus propre.

 

La soirée s’est ensuite terminée par un apéro-saucisson-fromage offert par Theodo, où se sont tenus de nombreux échanges, et je l’espère d’où sont nées plusieurs idées de conférences pour le PHP Tour de Nantes (un appel aux conférenciers est en cours, je le rappelle !).

Un grand merci à Adrien pour m’avoir indiqué dans quelle direction aller face à un problème de reporting, à Stéphane, que j’ai été ravie de recroiser, et avec qui discuter est toujours aussi intéressant ! Ainsi qu’à toutes les autres personnes avec qui j’ai pu échanger au cours de cette soirée.

Si cette soirée vous a plu, pensez à adhérer à l’AFUP. Complice

Merci aux conférenciers pour leur participation, à Theodo pour son sponsoring et à Eyrolles pour la salle.

L’antenne locale parisienne organisera un apéro PHP pour Septembre, d’ici là bonnes vacances à tous!

 

Commentaires 6

Guest - Jean

(website) le vendredi 13 juillet 2012 08:47

C'était effectivement une excellente soirée fort instructive avec une fin tout à fait plaisante même si, à mon sens, le véritable apéritif était l'ensemble des conférences : c'est en quelque sorte une mise en bouche nous invitant à approfondir le sujet dans nos développements quotidiens, à tout le moins pour ceux qui n'auraient jamais abordé le sujet des Design Patterns

C'était effectivement une excellente soirée fort instructive avec une fin tout à fait plaisante même si, à mon sens, le véritable apéritif était l'ensemble des conférences : c'est en quelque sorte une mise en bouche nous invitant à approfondir le sujet dans nos développements quotidiens, à tout le moins pour ceux qui n'auraient jamais abordé le sujet des Design Patterns :)

Super User

(website) le vendredi 13 juillet 2012 09:56

Très joliment dit, bravo Jean!
Après l'apéro permet aussi d'approfondir certains points de la conf, parfois restés obscurs, ou d'échanger sur des problèmes autres. Pour ma part, j'ai reçu un grand coup de main lors de l'apéro!

Très joliment dit, bravo Jean! Après l'apéro permet aussi d'approfondir certains points de la conf, parfois restés obscurs, ou d'échanger sur des problèmes autres. Pour ma part, j'ai reçu un grand coup de main lors de l'apéro! ;)

Guest - Stéphane Bortzmeyer

(website) le vendredi 13 juillet 2012 10:07

Les slaïdes de Julien Pauli sont également en ligne : http://www.slideshare.net/jpauli/afupdesign-patterns-en-php

Les slaïdes de Julien Pauli sont également en ligne : http://www.slideshare.net/jpauli/afupdesign-patterns-en-php

Super User

(website) le dimanche 15 juillet 2012 07:13

Merci Stéphane pour cette info, elle m'avait échappé!

Merci Stéphane pour cette info, elle m'avait échappé! :)

Guest - omrbcl

le samedi 7 septembre 2013 09:14

Such a very useful article. Very interesting to read this article.

Such a very useful article. Very interesting to read this article.

Guest - omrbcl

le samedi 7 septembre 2013 09:17

It's a great pleasure reading your post.It's full of information I am looking for and I love to post a comment that "The content of your post is awesome" Great work!

It's a great pleasure reading your post.It's full of information I am looking for and I love to post a comment that "The content of your post is awesome" Great work!
Pas encore de commentaire
Already Registered? Login Here
Guest
mercredi 28 octobre 2020

Image Captcha

By accepting you will be accessing a service provided by a third-party external to https://www.pulsar-agency.com/