skip to main | skip to sidebar
Code 18
Manuel du savoir-faire à l'usage des geeks et des curieux
RSS
  • Accueil
  • Le web au Québec
  • Liens
  • Twitter
  • Facebook
  • À propos

mardi 21 février 2012

Le piège des design patterns

Publié par Infinite Loop, à 09 h 36 2 commentaires

Durant une conversation sur l'heure du lunch, l'étudiant que nous embauchons en a profité pour faire du name dropping d'un design pattern qu'il a appris récemment durant un de ses cours. Manifestement, il était un peu trop enthousiaste à expliquer qu'il a pu faire des expérimentations à ce sujet dans une portion d'un de nos projets. L'équation "étudiant + expérimentation + notion non-maitrisée" a déclenché un stack overflow dans ma tête. Mieux valait intervenir tout de suite sans quoi, c'est encore bibi qui devra réajuster le tout dans un avenir plus ou moins rapproché. Immédiatement, je l'ai interrompu en lui faisant remarquer que non seulement il utilisait le pattern dans un mauvais contexte, mais surtout qu'il valait mieux ne pas essayer d'en appliquer juste pour le plaisir, que le choix d'en utiliser un doit d'abord solutionner un problème.

Tous les jours, on crée des patterns sans s'en rendre compte. Ce n'est qu'en analysant le travail effectué qu'on peut les mettre en évidence et si nécessaire, les nommer. Certains semblent ne jurer que par la bible du GoF qu'ils élèvent au niveau de livre culte. Loin de vouloir dénigrer ce livre (que je possède), je reproche à ses adeptes le manque de jugement quant à la façon de les mettre en application. Des concepts solides mais souvent fort mal utilisés.

Pour bien les comprendre et les apprécier, il faut parfois s'être planté en optant pour une solution moins élégante et plus compliquée à implémenter (menant parfois au blasphème et des nuits blanches). Les patterns ne sont qu'une solution parmi tant d'autres et il en existe beaucoup plus qu'il y en a de documentés.

Le terme design patterns a magnifiquement été traduit par patrons de conception. Un patron, ça m'évoque un modèle utilisé pour confectionner des vêtements. Pour que ce modèle puisse exister, il y avait d'abord un prototype unique, complété à force d'essais et d'erreurs, qu'on souhaitait ensuite imiter et reproduire en contournant les obstacles rencontrés lors de la création originale. Quand on écrit du code sur mesure, il n'y a pas que les tailles Small, Medium, Large et surtout pas One Size Fits All. Même pour les patterns, on doit y apporter différentes altérations pour que ça s'imbrique à la perfection dans notre projet. Ce n'est jamais une solution définitive mais plutôt une piste à suivre en vue de la résolution d'un problème.

C'est une source d'inspiration pour créer sa propre recette. Bien sûr, on pourrait suivre les étapes à la lettre en mélangeant les ingrédients mesurés avec exactitude mais il y a parfois des contraintes qui nous forcent à adapter la formule à nos besoins. Après tout, il n'existe pas qu'une seule recette de sauce à spaghetti même si la base de sauce tomate représente 75% de la solution. Tel un chef de cuisine, on ajoute de la personnalité au 25% restant. Créativité. Inventivité.

Enfin, la meilleure analogie qu'on m'a donné sur les patrons de conception est de faire le lien avec une gamme musicale. Même si on connaît toutes les notes de la gamme, qu'on les joue toutes dans le même ordre et au même rythme, ça ne produira pas une musique agréable. On ne peut pas ouvrir un livre de référence sur les gammes, en choisir une, la jouer sur son instrument et espérer que le public l'appréciera. Au contraire, le résultat sera ennuyant et n'atteindra pas son objectif. Idem pour les Design Patterns. Il faut voir ce que propose le GoF comme une référence sur les gammes : un point de départ solide pour construire des solos mais c'est à nous de les appliquer et les adapter pour en faire de la bonne musique.


Tags: Programmation

2 réponses à "Le piège des design patterns"

  1. Loïc Lavoie a dit...
    21 février 2012 à 13 h 48

    Personnellement, j'aime bien les idées nouvelle dans les designs pattern, mais je vois ca plus comme un restaurant: bien que chaque cuisinier ait sa propre vision, il doivent quand même suivre la même recette!

    Je crois que lorsque l'on choisit quelques structures, on doit s'y commiter. C'est à dire que chaque professionnel doit suivre la décision du groupe. On peut proposé de nouvelle approche, mais tout le groupe doit être d'accord, car c'est rarement une personnes seule qui assure la maintenabilité de l'application et sa flexibilité.

    Bref, mes deux cennes :-p

    Anonyme a dit...
    22 février 2012 à 06 h 48

    Après, il peut être bon de rappeler le but original des design patterns : éviter de réinventer la roue (carrée) et résoudre, de la meilleure façon qui soit (du moins par ce qu'en dicte le GoF), des problèmes courants. Bref, faire simple, robuste et rapide pour un cas donné et bien défini.

    Pour moi, il y a une règle de base : si vous devez complètement adapter un design pattern, alors soit vous n'en avez pas besoin, soit vous avez de grandes chances de vous planter.

    En effet, comme les designs patterns répondent à des problèmes, les adapter va a l'encontre de la philosophie du truc, c'est comme essayer de faire rentrer des cubes dans un trou rond : c'est un antipattern. Dans ce cas, autant oublier le design pattern et réfléchir à une solution neuve qui nous évitera de nous cacher, en cas d'erreur, derrière la sempiternelle excuse du "c'est une question de contexte".


Publier un commentaire

Message plus récent Messages plus anciens Accueil
S'abonner à : Publier des commentaires (Atom)
    Suivre @code18 sur Twitter

    Catégories

    • Apache (21)
    • Citations (167)
    • Club Vidéo (24)
    • Coffre à outils (56)
    • CSS (8)
    • Curiosités (117)
    • Design Pattern (2)
    • Drupal (8)
    • Easter Eggs (22)
    • Extensions Firefox (20)
    • GIMP (7)
    • Histoire (21)
    • HTML (32)
    • Humour (57)
    • Intégration (34)
    • iPod (12)
    • JavaScript (110)
    • Jeu de combat (6)
    • Le coin du geek (128)
    • Liens (12)
    • Linux (56)
    • Livres (78)
    • Lois et principes (46)
    • Marché des saveurs (26)
    • Mathématique (18)
    • Mobile (5)
    • Montréal (32)
    • Musique (112)
    • Pancartes et écriteaux (16)
    • Perl (8)
    • Pérou (1)
    • PHP (130)
    • PostgreSQL (44)
    • Programmation (105)
    • Saviez-vous que (55)
    • Sécurité (22)
    • SEO (5)
    • SQL Server (22)
    • Vieilles publicités (6)
    • Virtualisation (8)
    • Voyages (1)
    • Zend Framework (26)

    Divers

    Archives

    • ►  2015 (6)
      • ►  août 2015 (1)
      • ►  juillet 2015 (1)
      • ►  février 2015 (3)
      • ►  janvier 2015 (1)
    • ►  2014 (8)
      • ►  décembre 2014 (1)
      • ►  novembre 2014 (1)
      • ►  octobre 2014 (1)
      • ►  août 2014 (2)
      • ►  juillet 2014 (2)
      • ►  janvier 2014 (1)
    • ►  2013 (53)
      • ►  décembre 2013 (2)
      • ►  novembre 2013 (1)
      • ►  octobre 2013 (3)
      • ►  septembre 2013 (2)
      • ►  août 2013 (5)
      • ►  juillet 2013 (3)
      • ►  juin 2013 (5)
      • ►  mai 2013 (3)
      • ►  avril 2013 (7)
      • ►  mars 2013 (7)
      • ►  février 2013 (11)
      • ►  janvier 2013 (4)
    • ▼  2012 (105)
      • ►  décembre 2012 (8)
      • ►  novembre 2012 (5)
      • ►  octobre 2012 (4)
      • ►  septembre 2012 (1)
      • ►  août 2012 (8)
      • ►  juillet 2012 (7)
      • ►  juin 2012 (7)
      • ►  mai 2012 (10)
      • ►  avril 2012 (13)
      • ►  mars 2012 (15)
      • ▼  février 2012 (15)
        • Un dernier souffle pour mon iPod Touch
        • Zend_Date me fait perdre mon temps avec l'heure d'été
        • Aucun ingrédient imprononçable
        • L'affaire est ketchup
        • Citation no. 146 sur le guitariste
        • Personnage le plus vulgaire de tous les temps
        • Le piège des design patterns
        • Convertir une image couleur à grayscale avec le ca...
        • Mettre sa vie sur pause pendant un moment
        • Quoi faire quand le VPN nous déconnecte après 3 mi...
        • Effet miroir sur une image avec le canvas HTML5
        • Ces imbéciles qui veulent voir la vie en 3D
        • Citation no. 145 sur les langages de programmation
        • Créer un fichier image à partir du dataURL avec PHP
        • Enregistrement du contenu d'un canvas HTML5
      • ►  janvier 2012 (12)
    • ►  2011 (146)
      • ►  décembre 2011 (14)
      • ►  novembre 2011 (11)
      • ►  octobre 2011 (12)
      • ►  septembre 2011 (13)
      • ►  août 2011 (15)
      • ►  juillet 2011 (17)
      • ►  juin 2011 (18)
      • ►  mai 2011 (15)
      • ►  avril 2011 (9)
      • ►  mars 2011 (7)
      • ►  février 2011 (3)
      • ►  janvier 2011 (12)
    • ►  2010 (398)
      • ►  décembre 2010 (29)
      • ►  novembre 2010 (28)
      • ►  octobre 2010 (32)
      • ►  septembre 2010 (34)
      • ►  août 2010 (22)
      • ►  juillet 2010 (35)
      • ►  juin 2010 (42)
      • ►  mai 2010 (36)
      • ►  avril 2010 (37)
      • ►  mars 2010 (34)
      • ►  février 2010 (32)
      • ►  janvier 2010 (37)
    • ►  2009 (430)
      • ►  décembre 2009 (32)
      • ►  novembre 2009 (34)
      • ►  octobre 2009 (33)
      • ►  septembre 2009 (37)
      • ►  août 2009 (37)
      • ►  juillet 2009 (39)
      • ►  juin 2009 (38)
      • ►  mai 2009 (37)
      • ►  avril 2009 (35)
      • ►  mars 2009 (37)
      • ►  février 2009 (32)
      • ►  janvier 2009 (39)
    • ►  2008 (84)
      • ►  décembre 2008 (34)
      • ►  novembre 2008 (39)
      • ►  octobre 2008 (11)

    Abonnés

Copyright © All Rights Reserved. Code 18 | Converted into Blogger Templates by Theme Craft