Les design pattern

Un patron de conception est une manière optimisée de résoudre un problème récurrent. L’utilisation des patrons de conception est une bonne pratique.

Il existe 3 types de patrons :

  • comportementaux : ce type de patron gère la communication entre les objets
  • constructions : ils gèrent la mécanique d’instanciation.
  • structuraux : ils gèrent les relations entre les objets. Ils permettent une meilleure séparation des concepts et une évolutivité plus aisée.

Les patterns étudiés

Pattern décoration

Le décorateur permet la réutilisation d’un objet (et l’ajout de fonctionnalités, par exemple), tout en gardant l’objet dans sa précédente version.
Dans les langages orientés objets cela passe généralement par une encapsulation de l’objet à étendre (il devient un attribut privé du décorateur) et l’ajout de méthodes autours des méthodes existantes.

 

Pattern fabrique

La fabrique est une classe abstraite permettant l’instanciation d’un objet parmi plusieurs suivant le contexte. Il permet de ne plus s’occuper de l’instanciation d’un objet dans ses moindre détails, mais d’utiliser à la place une même méthode pourvue d’un contexte.
Le « contexte » peut prendre différentes formes, dans sa version la plus simple cela sera un paramètre donné à la construction de la fabrique.
Une variante de ce pattern est la « factory method », une fabrique sous la simple forme d’une opération, généralement « statique ».

L’opération de prestashop DB::getInstance( ) est un bon exemple de factory method. En fonction de votre configuration, cela vous « fabrique » un objet DB prêt à être utilisé.

Pattern observateur

Ce pattern permet la diffusion d’informations, ou d’événements, à des objets dont on n’a pas la maitrise d’instanciation. C’est à dire que vous ne savez pas à quels objets vont être utiles ces informations mais vous savez par contre qu’elles le seront nécessairement.
Il est souvent employé dans les framework d’interface utilisateur « riche » (tel que swing en java) sous l’appellation « Listener ».

Le principe de « hook » de prestashop peut ainsi être vu comme un pattern observation. Un exemple d’usage concret étant l’envoi d’un mail de confirmation au client lorsque le module de paiement notifie toute l’application que le paiement est effectif… et d’autres modules viennent se brancher à cet événement pour réaliser des opérations utiles pour votre commerçant.

Le pattern observateur définit une relation inverse de type un-à-plusieurs entre des objets

 

Adaptateur

L’adaptateur permet de rendre plusieurs classes existantes conformes à la même interface.
Cela passe par l’héritage ou l’extension de la classe qui agit en point d’entrée. Cette nouvelle classe implémentera alors l’interface du nouveau comportement à réaliser.
L’adaptateur se charge de modifier la forme des paramètres et le séquencement des opérations du nouveau composant à prendre en charge.

Un exemple de mise en oeuvre de ce pattern est la synchronisation des données d’un moteur d’indexation en fonction de la manipulation de votre base de données. Chaque opération de BDD devra mettre à jour l’index en fonction du traitement réalisé (ajout / modification / suppression). Cela ne peut marcher que si votre API de BDD est suffisamment « abstraite ».

Singleton

Le singleton a pour but de restreindre l’instanciation d’une classe à un seul objet. Il est utilisé lorsque l’on a besoin d’exactement un objet pour coordonner des opérations dans un système.
Cela peut être également dans le but de restreindre les ressources consommées par votre application.
Dans les langages orientées objets il devient en effet assez facile d’instancier beaucoup d’objet en cascade ayant le même « contenu » (valeur d’attribut). Le recours à un singleton est un bon moyen de limiter ce phénomène.

 

Callback

Le callback est une fonction passée en argument à une autre fonction. Cette dernière peut alors faire usage de cette fonction de rappel comme de n’importe quelle autre fonction, alors qu’elle ne la connaît pas par avance.
Un usage très fréquent de ce pattern est mis en oeuvre dans les systèmes asynchrones. C’est pas exemple le cas de vos fonctions de ‘success’ et d’ « error » lors d’appel ajax avec javascript/jQuery.

Le pattern callback n’est pas pour autant nécessairement asynchrone, et peut servir lorsque l’on délègue l’intelligence d’une partie de la réalisation d’une fonction. Par exemple, la fonction php usort prend en paramètre une fonction permettant au développeur de choisir les critères d’ordonnancement d’un tableau sans se préoccuper de la manière dont est parcouru et trié le tableau lui-même.

 

Difficultés et conclusion

La définition de patrons de conception est un sujet théorique, riche et vaste. Une bonne connaissance de ce domaine nous permet de mieux appréhender la complexité de certains problèmes par une mise en place de solutions déjà éprouvées.
Comprendre ces patterns c’est améliorer son travail et appliquer les bonnes pratiques de développement. Cela améliore aussi, de manière général, notre capacité de raisonnement sur la résolution des difficultés pour un résultat efficace.

Des pattern d’architecture logiciel tel que le MVC, que nous utilisons au quotidien, est basé sur l’association de trois patrons : Observateur, Stratégie et Composite

Cependant, l’apprentissage de ces patrons n’est pas une chose aisée. Le premier point à souligner est que les ressources sont nombreuses mais souvent contradictoires. Effectuer un apprentissage via internet n’est assurément pas la meilleure méthode. De plus, c’est un sujet qui demande beaucoup d’attention et de pratique pour comprendre et savoir utiliser les principaux patrons.

 

Bibliographie

Internet

http://fr.wikipedia.org/wiki/Patron_de_conception

http://design-patterns.fr/

http://net.tutsplus.com/articles/general/a-beginners-guide-to-design-patterns/?search_index=2

Livres

Bonus

Voici un lien de dernière minutes qui ne traite pas du « qu’est ce que ? » mais du « pourquoi ? » et « quand ? » :

http://net.tutsplus.com/tutorials/php/the-whens-and-whys-for-php-design-patterns/

 

Rédigé par Thomas Vanlerberghe

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

About Thomas

Développeur web depuis 2012, Thomas a réalisé de multiples projets e-commerce pour nos clients sur la plateforme Prestashop.

Aucun commentaire pour le moment ... Soyez le premier à laisser une réponse!