{"id":354,"date":"2009-09-02T16:36:32","date_gmt":"2009-09-02T14:36:32","guid":{"rendered":"http:\/\/www.do-as-i-say.com\/notes\/?p=354"},"modified":"2012-12-06T08:22:29","modified_gmt":"2012-12-06T06:22:29","slug":"design-patterns-symfony-explique-a-ma-maman-2","status":"publish","type":"post","link":"https:\/\/www.do-as-i-say.com\/notes\/2009\/09\/design-patterns-symfony-explique-a-ma-maman-2\/","title":{"rendered":"Symfony expliqu\u00e9 \u00e0 ma maman, 2\u00e8me partie : les design patterns"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"size-thumbnail wp-image-491 alignleft\" style=\"border: 1px solid black;\" title=\"Prendre la quatri\u00e8me \u00e0 gauche et tourner \u00e0 droite apr\u00e8s la fontaine\" src=\"http:\/\/www.do-as-i-say.com\/notes\/wp-content\/uploads\/design_pattern-150x150.jpg\" alt=\"Prendre la quatri\u00e8me \u00e0 gauche et tourner \u00e0 droite apr\u00e8s la fontaine\" width=\"128\" height=\"128\" \/><\/p>\n<p><em>R\u00e9sum\u00e9 de l&rsquo;<a href=\"\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/\">\u00e9pisode pr\u00e9c\u00e9dent<\/a> : un <\/em><em>framework, c&rsquo;est une bo\u00eete \u00e0 outils, des briques de base, et une m\u00e9thodologie pour d\u00e9velopper mieux, plus vite, et de mani\u00e8re plus s\u00fbre (un peu <a title=\"Plus dur, meilleur, plus rapide, plus fort\" href=\"http:\/\/jiwa.fr\/track\/La-Pompe-Moderne-101321\/Plus-dur-meilleur-plus-rapide-plus-fort-159007\/Plus-dur-meilleur-plus-rapide-plus-fort-1207858.html\" target=\"_blank\">comme \u00e7a, quoi<\/a>). Mais si \u00e7a peut fortement aider, \u00e7a n&rsquo;est pas magique, et \u00e7a demande de suivre les principes du framework lui-m\u00eame.<\/em><\/p>\n<p>Une partie des principes m\u00e9thodologiques qui va avec un framework est\u00a0 couramment regroup\u00e9e sous le nom de <em><strong>design patterns<\/strong><\/em>. Une fois encore, on s&rsquo;abstiendra de traduire l&rsquo;expression (la version fran\u00e7aise pr\u00e9conis\u00e9e \u00e9tant <em>patrons de conception<\/em>, et \u00e7a sonne un peu Berg\u00e8re de France&#8230;)<\/p>\n<p><!--more--><\/p>\n<p>Pour faire court (dans un premier temps), disons qu&rsquo;<strong>un design pattern est une fa\u00e7on de r\u00e9soudre un probl\u00e8me type.<\/strong> Il ne s&rsquo;agit donc pas d&rsquo;une solution en tant que telle, mais plut\u00f4t d&rsquo;une recette, c&rsquo;est-\u00e0-dire la description d&rsquo;une mani\u00e8re d&rsquo;op\u00e9rer face \u00e0 un certain type de probl\u00e8me.<\/p>\n<p>Historiquement, la th\u00e9orisation des design patterns fait beaucoup r\u00e9f\u00e9rence, et c&rsquo;est une <a href=\"\/notes\/2009\/08\/le-carreleur-et-le-developpeur\/\">chose qui ne nous \u00e9tonnera pas<\/a>, au domaine de l&rsquo;architecture, de l&rsquo;urbanisme et de la construction, notamment suite au travaux de <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Christopher_Alexander\" target=\"_blank\">Christopher Alexander<\/a> dans les ann\u00e9es 70.<br \/>\nConstatant que la conception en architecture en particulier, mais aussi en ing\u00e9nierie en g\u00e9n\u00e9ral, conduisait \u00e0 affronter des probl\u00e8mes r\u00e9currents (isolation, solidit\u00e9 des structures, communication entre l&rsquo;int\u00e9rieur et l&rsquo;ext\u00e9rieur&#8230;) il abstrait des arch\u00e9types destin\u00e9s \u00e0 couvrir tous ces aspects<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/09\/design-patterns-symfony-explique-a-ma-maman-2\/#footnote_0_354\" id=\"identifier_0_354\" class=\"footnote-link footnote-identifier-link\" title=\"Le livre fondateur, A Language Pattern: Towns, Buildings, Construction, 1977, Oxford U.P., pr\u00e9sente ainsi 253 patterns, pas moins, couvrant tous les aspects de la construction et de l&rsquo;urbanisme, de la distribution villes\/champs dans une r\u00e9gion \u00e0 l&rsquo;\u00e9paisseur et au mat\u00e9riau des murs int\u00e9rieurs, en passant par les animaux de compagnie et les bancs publics\u00a0\u2014 o\u00f9 les habitants doivent pouvoir faire la sieste.\">1<\/a>]<\/sup>.<\/p>\n<p>Un <em>pattern<\/em> est ainsi \u00e0 comprendre comme un <strong>\u00ab\u00a0mod\u00e8le\u00a0\u00bb \u00e9prouv\u00e9 reliant une solution \u00e0 un probl\u00e8me dans un certain contexte<\/strong>.<\/p>\n<p>Tout probl\u00e8me de conception, dirait Alexander, met en jeu un seul individu face \u00e0 une immensit\u00e9. Ce probl\u00e8me contient un certain nombre de variables qui, combin\u00e9es en sous-ensembles, repr\u00e9sentent un nombre de cas d\u00e9bordant rapidement les capacit\u00e9s limit\u00e9es de son cerveau.<br \/>\nD&rsquo;o\u00f9 l&rsquo;int\u00e9r\u00eat de diviser et de hi\u00e9rarchiser ces sous-ensembles pour les \u00e9tudier \u00e0 part, et recourir \u00e0 ce qu&rsquo;on pourrait nommer le bon sens collectif de l&rsquo;histoire (capitaliser sur les solutions qui ont prouv\u00e9 qu&rsquo;elles marchaient).<br \/>\nD\u00e8s ses premiers travaux Alexander met l&rsquo;accent sur la n\u00e9cessit\u00e9 de comprendre les rapports entre les parties et le tout, et de savoir comment s&rsquo;y prendre pour traiter ce tout. Ce que nous avons appel\u00e9 dans l&rsquo;\u00e9pisode pr\u00e9c\u00e9dent <strong><em>faire face \u00e0 la complexit\u00e9<\/em><\/strong>.<\/p>\n<h3>De l&rsquo;urbanisme \u00e0 la POO<\/h3>\n<p>En 1995, les quatre mousquetaires du pattern, le bien nomm\u00e9 \u00ab\u00a0Gang Of Four\u00a0\u00bb, s&rsquo;inspirent d&rsquo;une partie de ces travaux et transposent la m\u00e9thode dans la programmation orient\u00e9e objet<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/09\/design-patterns-symfony-explique-a-ma-maman-2\/#footnote_1_354\" id=\"identifier_1_354\" class=\"footnote-link footnote-identifier-link\" title=\"Design Patterns : Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson &amp; John Vlissides, 1995, Addison-Wesley.\">2<\/a>]<\/sup>. Comme Alexander, m\u00eame si la d\u00e9marche est, disons, moins empreinte d&rsquo;une sourde angoisse m\u00e9taphysique quant \u00e0 l&rsquo;appr\u00e9hension de l&rsquo;infini, leur but est de proposer des outils conceptuels pour g\u00e9rer la complexit\u00e9, en l&rsquo;occurrence, pos\u00e9e par certains probl\u00e8mes r\u00e9currents en programmation.<br \/>\nIls sont issus des bonnes trouvailles et des bonnes pratiques de g\u00e9n\u00e9rations de d\u00e9veloppeurs et dispensent ainsi, comme on dit souvent, de r\u00e9inventer le fil \u00e0 couper la roue<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/09\/design-patterns-symfony-explique-a-ma-maman-2\/#footnote_2_354\" id=\"identifier_2_354\" class=\"footnote-link footnote-identifier-link\" title=\"Comme on n&rsquo;est jamais assez prudent, je pr\u00e9cise que le deux expressions ici m\u00e9lang\u00e9es sans vergogne sont \u00ab\u00a0r\u00e9inventer la roue\u00a0\u00bb et \u00ab\u00a0inventer le fil \u00e0 couper le beurre\u00a0\u00bb.\">3<\/a>]<\/sup>.<\/p>\n<p>J&rsquo;avais commenc\u00e9 un paragraphe complet donnant un exemple (en choisissant le pattern <em>bridge<\/em>, un mod\u00e8le assez \u00ab\u00a0simple\u00a0\u00bb), et j&rsquo;ai renonc\u00e9, car on ne peut pas en dire grand chose sans \u00e9voquer la programmation orient\u00e9e objet, que ma ch\u00e8re maman n&rsquo;est pas cens\u00e9e conna\u00eetre, donc qui d\u00e9borde le cadre de cette page.<br \/>\nJe t\u00e2cherai de pr\u00e9senter en revanche dans un \u00e9pisode prochain le <strong>MVC<\/strong>, un design pattern assez connu \u2014 qui est en fait, pour \u00eatre rigoureux, une combinaison de patterns. Retenons juste ceci en attendant, et au risque de me r\u00e9p\u00e9ter : il ne s&rsquo;agit pas de classes ou de bouts de programme, mais de fa\u00e7ons de structurer son mod\u00e8le de donn\u00e9es, son architecture, son application, et ultimement son code (quelque soit le langage objet).<\/p>\n<p>En guise de conclusion, et pour s&rsquo;\u00e9loigner d\u00e9finitivement d&rsquo;Alexander, signalons qu&rsquo;on parle aussi de temps en temps du n\u00e9gatif des patterns, les <strong>antipatterns<\/strong>.<\/p>\n<p>Comme leur nom l&rsquo;indique, il s&rsquo;agit des fa\u00e7ons de faire qui sont exactement ce qu&rsquo;il faut \u00e9viter. On regroupe sous ce nom des pratiques h\u00e9t\u00e9rog\u00e8nes aux noms parfois sympatoches, comme <em>la coul\u00e9e de lave<\/em> (mise en production d&rsquo;un code non stabilis\u00e9 qui de fait devient de moins en moins modifiable, se \u00ab\u00a0solidifiant\u00a0\u00bb comme de la lave), <em>l&rsquo;ancre de bateau<\/em> (code conserv\u00e9 pour des raisons \u00ab\u00a0politiques\u00a0\u00bb, pour ne pas f\u00e2cher un d\u00e9veloppeur et\/ou en se disant qu&rsquo;il servira plus tard&#8230;), ou <em>l&rsquo;objet divin<\/em> (m\u00e9thode ou fonction servant \u00e0 trop de choses, et dont on finit par ne plus trop savoir comment elle marche).<br \/>\nElles sont \u00e9videmment, presque autant que les autres, utiles au d\u00e9veloppeur \u2014 qui aura toujours au d\u00e9but de son existence mis en \u0153uvre, m\u00eame \u00e0 son corps d\u00e9fendant, au moins l&rsquo;un d&rsquo;eux, sinon presque tous.<\/p>\n<p><em>Dans le prochain \u00e9pisode, cette fois, on parlera de MVC&#8230;<\/em><\/p>\n<p>___________________________________<\/p>\n<p><em>Image du Sch\u00e9ma emprunt\u00e9e ici : <a href=\"http:\/\/www.simonwhatley.co.uk\/coldfusion-and-design-patterns\" target=\"_blank\">http:\/\/www.simonwhatley.co.uk\/coldfusion-and-design-patterns<\/a><\/em><\/p>\n________________________________________________\r\n<br\/><ol class=\"footnotes\"><li id=\"footnote_0_354\" class=\"footnote\">Le livre fondateur, <a title=\"Sommaire et r\u00e9sum\u00e9 du livre (en anglais)\" href=\"http:\/\/downlode.org\/Etext\/Patterns\/\" target=\"_blank\"><em>A Language Pattern<\/em>: Towns, Buildings, Construction<\/a>, 1977, Oxford U.P., pr\u00e9sente ainsi 253 patterns, pas moins, couvrant tous les aspects de la construction et de l&rsquo;urbanisme, de la distribution villes\/champs dans une r\u00e9gion \u00e0 l&rsquo;\u00e9paisseur et au mat\u00e9riau des murs int\u00e9rieurs, en passant par les animaux de compagnie et les bancs publics\u00a0\u2014 o\u00f9 les habitants doivent pouvoir faire la sieste. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/09\/design-patterns-symfony-explique-a-ma-maman-2\/#identifier_0_354\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_1_354\" class=\"footnote\"><em>Design Patterns : Elements of Reusable Object-Oriented Software<\/em>, Erich Gamma, Richard Helm, Ralph Johnson &amp; John Vlissides, 1995, Addison-Wesley. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/09\/design-patterns-symfony-explique-a-ma-maman-2\/#identifier_1_354\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_2_354\" class=\"footnote\">Comme on n&rsquo;est jamais assez prudent, je pr\u00e9cise que le deux expressions ici m\u00e9lang\u00e9es sans vergogne sont \u00ab\u00a0r\u00e9inventer la roue\u00a0\u00bb et \u00ab\u00a0inventer le fil \u00e0 couper le beurre\u00a0\u00bb. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/09\/design-patterns-symfony-explique-a-ma-maman-2\/#identifier_2_354\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>R\u00e9sum\u00e9 de l&rsquo;\u00e9pisode pr\u00e9c\u00e9dent : un framework, c&rsquo;est une bo\u00eete \u00e0 outils, des briques de base, et une m\u00e9thodologie pour d\u00e9velopper mieux, plus vite, et de mani\u00e8re plus s\u00fbre (un peu comme \u00e7a, quoi). Mais si \u00e7a peut fortement aider, \u00e7a n&rsquo;est pas magique, et \u00e7a demande de suivre les principes du framework lui-m\u00eame. Une [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[43,27,42,21,22,55],"class_list":["post-354","post","type-post","status-publish","format-standard","hentry","category-trucs-expliques-a-ma-maman","tag-antipatterns","tag-complexite","tag-design-patterns","tag-framework","tag-methodologie","tag-symfony"],"_links":{"self":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/comments?post=354"}],"version-history":[{"count":63,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/354\/revisions"}],"predecessor-version":[{"id":1207,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/354\/revisions\/1207"}],"wp:attachment":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/media?parent=354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/categories?post=354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/tags?post=354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}