<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Do as i say, not as i do &#187; design patterns</title>
	<atom:link href="http://www.do-as-i-say.com/notes/tag/design-patterns/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.do-as-i-say.com/notes</link>
	<description>Car dire ça n&#039;est pas toujours faire, mais ça ne coûte rien</description>
	<lastBuildDate>Thu, 08 Dec 2011 21:25:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Symfony expliqué à ma maman, 4ème partie : le MVC</title>
		<link>http://www.do-as-i-say.com/notes/2010/03/mvc-symfony-explique-a-ma-maman-4/</link>
		<comments>http://www.do-as-i-say.com/notes/2010/03/mvc-symfony-explique-a-ma-maman-4/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 08:52:59 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=607</guid>
		<description><![CDATA[Suite aux posts un peu laborieux sur les design patterns et le découplage, il est temps d&#8217;être (un peu plus) concret et de raconter la vie d&#8217;un ami qui vous veut du bien : le MVC.
Le MVC est un design pattern qui est l&#8217;abréviation de Modèle-Vue-Contrôleur, et pour une fois, en anglais ou en français, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-618" style="border: 1px solid black;" title="L'homme et la machine" src="http://www.do-as-i-say.com/notes/wp-content/uploads/man_machine-150x150.png" alt="L'homme et le machine" width="128" height="128" />Suite aux posts un peu laborieux sur les <a href="/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/">design patterns</a> et le <a href="/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/" target="_blank">découplage</a>, il est temps d&#8217;être (un peu plus) concret et de raconter la vie d&#8217;un ami qui vous veut du bien : <strong>le MVC</strong>.</p>
<p>Le MVC est un design pattern qui est l&#8217;abréviation de Modèle-Vue-Contrôleur, et pour une fois, en anglais ou en français, ça fait les mêmes initiales (<em>Model-View-Controller</em>), donc y aura pas de débat sur comment qu&#8217;on doit causer. On raconte que son créateur se nomme Trygve Reenskaug, me demandez pas comment ça se prononce — son créateur, ou disons son théoricien, car comme souvent, on ne l&#8217;avait pas forcément attendu pour opérer de cette façon, mais il a mis des mots dessus (ce qui ne diminue pas l&#8217;importance de son travail).</p>
<p><span id="more-607"></span>Pour tout dire, quiconque a fait seul dans son coin des sites web dynamiques en mettant un peu (beaucoup) les mains dans le cambouis des langages/bases de données/exploitations multiples des mêmes informations, etc, a de fortes chances d&#8217;avoir à un certain niveau commencé à appréhender plus ou moins consciemment le MVC &#8211; ou alors, il a vraiment beaucoup galéré, et il est un petit peu décédé à l&#8217;heure qu&#8217;il est.<br />
Moi qui vous parle, enfin vous écrit, avant de lire quelques livres intéressants sur le sujet et de découvrir des frameworks, j&#8217;en étais arrivé à travailler systématiquement avec d&#8217;un côté des méthodes d&#8217;accès aux informations (à peu près bien abstraites du système de base de données), de l&#8217;autre des fichiers traitant les sorties (pour le web, pour le XML, pour des usages internes&#8230;), et au milieu un ou plusieurs points traitant les actions des utilisateurs et décidant ce qui devait être mis en œuvre.</p>
<p>Bien sûr, n&#8217;ayant pas conscience clairement des enjeux de cette division (faute entre autres d&#8217;avoir mis des mots dessus ; d&#8217;où l&#8217;importance de nommer), il traînait de nombreuses erreurs d&#8217;organisation affaiblissant souvent pas mal l&#8217;ensemble. Mais le fond était là : porté par la <strong>nécessité interne </strong>des traitements récurrents nécessaires pour une application web, j&#8217;avais fait un premier pas sans même le savoir, tel le Monsieur Jourdain des design patterns, dans le monde merveilleux du MVC.</p>
<h3>Le MVC, ou comment diviser pour mieux régner</h3>
<p>Précisons avant d&#8217;aller plus loin que comme tout design pattern, MVC n&#8217;est pas spécifiquement dédié à une technologie, un langage ou quoique ce soit.<br />
Il concerne de droit toute application avec une interface Homme-Machine, comme on dit (enfin, on dit IHM si on veut avoir l&#8217;air au courant), et consiste en une sorte de paradigme de l&#8217;organisation de l&#8217;application, séparant les données et leur vie (modèle), leur présentation (vue), et la gestion des événements (contrôleur).</p>
<p>Séparer le modèle et la vue repose sur une exigence au fond assez simple, qu&#8217;on pourra schématiser comme suit : il faut traiter d&#8217;un côté le &laquo;&nbsp;fond&nbsp;&raquo;, de l&#8217;autre la &laquo;&nbsp;forme&nbsp;&raquo;. Je recours aux guillemets, non pas pour pourrir la lecture, mais parce que l&#8217;utilisation de ces deux termes et leur séparation semblent aller de soi, or comme tout ce qui &laquo;&nbsp;va de soi&nbsp;&raquo;, elles méritent d&#8217;être questionnées. Il est illusoire de croire qu&#8217;il y aurait d&#8217;un côté du &laquo;&nbsp;fond&nbsp;&raquo; (du contenu, de la pensée&#8230;) et de l&#8217;autre de la &laquo;&nbsp;forme&nbsp;&raquo; (l&#8217;expression, qu&#8217;elle soit écrite, orale, artistique&#8230;)<br />
Autant supposer qu&#8217;on peut sans autre forme de procès séparer la musique du son, ou l&#8217;objet de sa manifestation — ce fantasme de séparation n&#8217;est en fait qu&#8217;une autre version de l&#8217;illusion platonicienne de la chose en soi, &laquo;&nbsp;vraie&nbsp;&raquo; chose dont le phénomène serait une version dégradée dans notre pauvre monde d&#8217;apparences.<br />
Non pas qu&#8217;il n&#8217;y ait pas un intérêt théorique capital à pouvoir <em>considérer</em> séparément ces aspects ; mais dans la réalité, je vous le dis, croyez-moi sur parole, le phénomène épuise tout ce qu&#8217;il y a à être de la chose, et la forme, comme je l&#8217;ai déjà formulé dans une note précédente, et exactement <strong>forme de son fond et réciproquement</strong>. Bref. J&#8217;ai clairement entamé un autre post ici, qui verra peut-être le jour une autre fois. Revenons à nos moutons.</p>
<p>Nos moutons sont le M, le V, et le C. Il n&#8217;aura échappé à personne, du moins à personne qui aura lu avec un minimum de concentration le <a href="/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/">billet précédent sur les prises électriques et les grille-pain</a> (mais je reconnais qu&#8217;il faut du courage), qu&#8217;une organisation isolant bien ces trois aspects d&#8217;un programme est comme l&#8217;archétype du découplage.<br />
Votre modèle (en gros, les données) peut changer de principe de stockage, de nature même si ça vous chante, pour peu qu&#8217;il soit correctement <em>interfacé</em> avec les autres couches du MVC, elles n&#8217;y verront que du feu. Le centre nerveux de votre application (le contrôleur, qui réagit aux actions de l&#8217;utilisateur et distribue les réponses) peut de son côté traiter n&#8217;importe quel type d&#8217;entrées et rediriger les sorties vers n&#8217;importe quel affichage, i.e. les vues. Vues qui de leur côté se contentent de mettre en forme (grosso modo) des informations, indépendamment de leur origine. J&#8217;ai failli dire &laquo;&nbsp;se contentent d&#8217;<em>afficher&nbsp;&raquo;</em>, mais en fait, contrairement à ce que son nom laisse croire, une &laquo;&nbsp;vue&nbsp;&raquo; au sens du MVC ne résulte pas nécessairement en quelque chose de&#8230; visuel. Une vue peut-être par exemple un fichier XML, qui vivra sa vie ensuite selon le client (au sens informatique) qui l&#8217;a requis.</p>
<h3>Quand l&#8217;intelligence gagne la matière</h3>
<p>L&#8217;intérêt très concret de l&#8217;application du MVC est qu&#8217;il isole les opérations, donc que chacun n&#8217;a à s&#8217;occuper que de sa partie. Et comme dans la vie, c&#8217;est toujours mieux quand chacun ne s&#8217;occupe que de ce qui le regarde. Dans ma Normandie natale, on dit &laquo;&nbsp;<em>Chacun son champ, les vaches sont bien gardées</em>&laquo;&nbsp;. Eh bien on ne peut mieux formuler le principe du MVC.<br />
En termes de développement, cette division conceptuelle vise à organiser les rôles par fonction, et à <strong>traduire les différences de nature en séparations opérationnelles</strong>. Comme si on faisait rentrer dans la chair du code, qui a priori n&#8217;en a que faire, un peu du sens des objets qu&#8217;on manipule. En contre-partie, dans un effet de résonance sémantique, j&#8217;irais bien jusqu&#8217;à dire : de récompense sémantique, le code, initialement &laquo;&nbsp;bête&nbsp;&raquo;, gagne en intelligence d&#8217;organisation et d&#8217;évolution. Risquons la formule : <em>bien utiliser le MVC, c&#8217;est insuffler de l&#8217;âme dans la matière. </em>Ouaip. Pas moins.</p>
<p>L&#8217;ultime intérêt, non des moindres, est pédagogique : en s&#8217;efforçant d&#8217;appliquer cette discipline de conception et d&#8217;implémentation, on s&#8217;oblige à bien comprendre ce qui fait quoi dans son application. Et croyez-moi, c&#8217;est pas de la tarte.<br />
Mais, une fois encore, une bonne méthode appliquée avec constance finit par insuffler plus que du mécanisme, et crée de l&#8217;intelligence. Et pas que dans le code. Dans le codeur également. C&#8217;est toute la puissance de la <em>méthodologie</em> : des idées régulatrices qui <em>dirigent vers </em>un endroit. Et même si on ne sait pas précisément où est l&#8217;endroit, on peut travailler à avancer dans la bonne direction, et à bien arpenter le <strong>chemin</strong>.<br />
Car pour finir sur une touche étymologique du meilleur aloi, c&#8217;est précisément de là que vient le mot <em>méthode</em> : μέθα (<em>méta</em>, qui suit) οδός (<em>odos</em>, le chemin).</p>
<p>___________________________________</p>
<p><em>Image empruntée ici : <a href="http://www.marriedtothesea.com/archives/2007/Aug/" target="_blank">http://www.marriedtothesea.com/archives/2007/Aug/</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2010/03/mvc-symfony-explique-a-ma-maman-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Symfony expliqué à ma maman, 3ème partie : le découplage</title>
		<link>http://www.do-as-i-say.com/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 09:53:19 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[découplage]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[principe]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=624</guid>
		<description><![CDATA[Alors que j&#8217;avais presque fini l&#8217;épisode sur le MVC, j&#8217;en suis venu à réaliser qu&#8217;il manquait une étape. Un concept capital dans toutes nos histoires de framework, de boîte à outils et de méthodologie. Je ne vous fait pas languir plus longtemps : il porte le nom de découplage.
Pour une fois, le champ lexical auquel [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-632" style="border: 1px solid black;" title="Une prise verte. Dingue." src="http://www.do-as-i-say.com/notes/wp-content/uploads/prise_electrique-150x150.jpg" alt="Une prise verte. Dingue." width="128" height="128" />Alors que j&#8217;avais presque fini l&#8217;épisode sur le MVC, j&#8217;en suis venu à réaliser qu&#8217;il manquait une étape. Un concept capital dans toutes nos histoires de framework, de boîte à outils et de méthodologie. Je ne vous fait pas languir plus longtemps : il porte le nom de <strong>découplage</strong>.</p>
<p>Pour une fois, le champ lexical auquel le concept est emprunté n&#8217;est pas celui du BTP, même si on n&#8217;en est pas loin : c&#8217;est celui de l&#8217;électricité. Découpler y signifie supprimer le couplage entre deux circuits (ok, on est proche de la lapalissade, mais bon).</p>
<p><span id="more-624"></span></p>
<p>L&#8217;exemple le plus parlant sera celui de la prise électrique. Si on n&#8217;avait pas défini de standard ni  un principe de prises mâles et femelles, on vivrait dans un monde où les appareils électriques ne pourraient être vendus prêts à être branchés, où il faudrait  faire intervenir un électricien pour les raccorder au réseau, et où une fois installés on ne pourrait plus les déplacer ni les brancher ailleurs (sauf à répéter l&#8217;intervention). Assombrissons le tableau, et imaginons que dans ce même monde le réseau électrique n&#8217;aie pas de tension standard, mais distribue du 230 volts ici, 110 là, 3.14 ailleurs, etc. Non seulement il faudrait une manipulation technique pour connecter le grille-pain, mais aussi pour l&#8217;adapter à la tension. Manip&#8217; à répéter à chaque déplacement de la bête&#8230;</p>
<p>Le problème que l&#8217;on aurait dans un tel monde serait celui d&#8217;un très fort <strong>couplage </strong>entre les appareils et le réseau électrique. Inutile de vous faire un dessin pour expliquer à quel point ça ne serait pas commode. Pour rester poli et ne pas dire chiant. Ah mince je l&#8217;ai dit.</p>
<p>En informatique, on s&#8217;est rapidement soucié du couplage, que ce soit du point de vue matériel comme pour les prises électriques en définissant des standards plus ou moins universels (PCI, RS232, USB, firewire&#8230;), ou logiciel (dans les programmes, ou dans les couches inférieures, par exemple le modèle adopté pour l&#8217;interconnexion des réseaux, OSI, mais c&#8217;est un autre sujet).</p>
<p>En ce qui concerne le sujet qui nous intéresse, le développement d&#8217;applications web via les frameworks en général et Symfony en particulier, le découplage est une notion critique.<br />
Elle fonde l&#8217;organisation du framework lui-même, et sous-tend toutes les bonnes pratiques qui vont avec et doivent être appliquées dans le code spécifique à l&#8217;application.</p>
<h2>Interfacer pour mieux découpler</h2>
<p>Pour le formuler autrement, le<strong> découplage consiste en l&#8217;indépendance maximale </strong>de toutes les &laquo;&nbsp;briques&nbsp;&raquo; entre elles. Mais comme ces briques doivent communiquer, leurs <strong>interfaces, c&#8217;est-à-dire leur frontières de communication</strong>, doivent être codifiées.<br />
C&#8217;est pourquoi en électricité on a réduit les nombres de connecteurs et définit des standards. C&#8217;est pourquoi en informatique on a défini des <em>protocoles</em>, autrement dit des règles d&#8217;échange. Car pour permettre le découplage, il faut se concentrer sur l&#8217;endroit — si je puis me permettre — où ça s&#8217;accouple, et l&#8217;abstraire des contingences et des spécificités (amen).</p>
<p><img class="alignright size-full wp-image-649" style="border: 1px solid black;" title="sfToasterPlugin" src="http://www.do-as-i-say.com/notes/wp-content/uploads/grille-pain.jpg" alt="sfToasterPlugin" width="128" height="128" />De la même manière qu&#8217;on ne souhaite pas avoir à changer de grille-pain si on change les prises ou si on déménage, on veut pouvoir faire abstraction, en développant une application web, de la façon dont l&#8217;accès aux données est géré (il nous suffit de savoir qu&#8217;il l&#8217;est), du type de serveur de base de données (on veut idéalement pouvoir utiliser n&#8217;importe lequel). Bref, on veut pouvoir se brancher dessus sans avoir à se demander comment. Aussi simplement qu&#8217;en branchant une prise mâle dans une prise femelle.<br />
D&#8217;une manière générale, les fonctionnalités du framework doivent pouvoir être<strong> utilisées les unes indépendamment des autres</strong>, sans quoi leur mise en œuvre reviendra la plupart du temps à écraser une mouche avec un marteau-piqueur, ou pour rester sur notre champ lexical du jour, à faire construire une maison entière pour pouvoir brancher notre grille-pain.</p>
<p>Cette indépendance des &laquo;&nbsp;éléments&nbsp;&raquo; a un deuxième intérêt, non des moindres : il rend possible l&#8217;évolution ou la réparation des uns sans avoir à intervenir sur les autres.<br />
Dans la vie bien découplée, vous pouvez acheter une cafetière neuve (ouaip, changeons d&#8217;objet électroménager, ça commence à devenir saoulant le grille-pain) sans avoir à refaire toute votre installation électrique, non ?  Et bien si votre code et votre application sont eux aussi <em>correctement découplés </em>vous devez pouvoir modifier, mettons, votre logiciel d&#8217;envoi de mail sans avoir à retoucher à tous les endroits où vous envoyez des mails.</p>
<p>En résumé, si vous voulez briller en société (ou en lan party, encore que..) pensez à caser &laquo;&nbsp;découplage&nbsp;&raquo; au détour d&#8217;une saillie, ça fait toujours son effet. Si vous voulez briller en tests unitaires, c&#8217;est bien aussi, mais ça sera l&#8217;objet d&#8217;un épisode de la saison 2.</p>
<p><em>Dans le prochain épisode, cette fois c&#8217;est juré-craché-si-je-mens-je-vais-à-Denfert, on parlera de MVC…</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Symfony expliqué à ma maman, 2ème partie : les design patterns</title>
		<link>http://www.do-as-i-say.com/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 14:36:32 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[antipatterns]]></category>
		<category><![CDATA[complexité]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=354</guid>
		<description><![CDATA[
Résumé de l&#8217;épisode précédent : un framework, c&#8217;est une boîte à outils, des briques de base, et une méthodologie pour développer mieux, plus vite, et de manière plus sûre (un peu comme ça, quoi). Mais si ça peut fortement aider, ça n&#8217;est pas magique, et ça demande de suivre les principes du framework lui-même.
Une partie [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-491 alignleft" style="border: 1px solid black;" title="Prendre la quatrième à gauche et tourner à droite après la fontaine" src="http://www.do-as-i-say.com/notes/wp-content/uploads/design_pattern-150x150.jpg" alt="Prendre la quatrième à gauche et tourner à droite après la fontaine" width="128" height="128" /></p>
<p><em>Résumé de l&#8217;<a href="/notes/2009/08/framework-symfony-explique-a-ma-maman-1/">épisode précédent</a> : un </em><em>framework, c&#8217;est une boîte à outils, des briques de base, et une méthodologie pour développer mieux, plus vite, et de manière plus sûre (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 ça, quoi</a>). Mais si ça peut fortement aider, ça n&#8217;est pas magique, et ça demande de suivre les principes du framework lui-même.</em></p>
<p>Une partie des principes méthodologiques qui va avec un framework est  couramment regroupée sous le nom de <em><strong>design patterns</strong></em>. Une fois encore, on s&#8217;abstiendra de traduire l&#8217;expression (la version française préconisée étant <em>patrons de conception</em>, et ça sonne un peu Bergère de France&#8230;)</p>
<p><span id="more-354"></span></p>
<p>Pour faire court (dans un premier temps), disons qu&#8217;<strong>un design pattern est une façon de résoudre un problème type.</strong> Il ne s&#8217;agit donc pas d&#8217;une solution en tant que telle, mais plutôt d&#8217;une recette, c&#8217;est-à-dire la description d&#8217;une manière d&#8217;opérer face à un certain type de problème.</p>
<p>Historiquement, la théorisation des design patterns fait beaucoup référence, et c&#8217;est une <a href="/notes/2009/08/le-carreleur-et-le-developpeur/">chose qui ne nous étonnera pas</a>, au domaine de l&#8217;architecture, de l&#8217;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ées 70.<br />
Constatant que la conception en architecture en particulier, mais aussi en ingénierie en général, conduisait à affronter des problèmes récurrents (isolation, solidité des structures, communication entre l&#8217;intérieur et l&#8217;extérieur&#8230;) il abstrait des archétypes destinés à couvrir tous ces aspects.</p>
<p>Un <em>pattern</em> est ainsi à comprendre comme un <strong>&laquo;&nbsp;modèle&nbsp;&raquo; éprouvé reliant une solution à un problème dans un certain contexte</strong>.</p>
<p>Tout problème de conception, dirait Alexander, met en jeu un seul individu face à une immensité. Ce problème contient un certain nombre de variables qui, combinées en sous-ensembles, représentent un nombre de cas débordant rapidement les capacités limitées de son cerveau.<br />
D&#8217;où l&#8217;intérêt de diviser et de hiérarchiser ces sous-ensembles pour les étudier à part, et recourir à ce qu&#8217;on pourrait nommer le bon sens collectif de l&#8217;histoire (capitaliser sur les solutions qui ont prouvé qu&#8217;elles marchaient).<br />
Dès ses premiers travaux Alexander met l&#8217;accent sur la nécessité de comprendre les rapports entre les parties et le tout, et de savoir comment s&#8217;y prendre pour traiter ce tout. Ce que nous avons appelé dans l&#8217;épisode précédent <strong><em>faire face à la complexité</em></strong>.</p>
<h3>De l&#8217;urbanisme à la POO</h3>
<p>En 1995, les quatre mousquetaires du pattern, le bien nommé &laquo;&nbsp;Gang Of Four&nbsp;&raquo;, s&#8217;inspirent d&#8217;une partie de ces travaux et transposent la méthode dans la programmation orientée objet. Comme Alexander, même si la démarche est, disons, moins empreinte d&#8217;une sourde angoisse métaphysique quant à l&#8217;appréhension de l&#8217;infini, leur but est de proposer des outils conceptuels pour gérer la complexité, en l&#8217;occurrence, posée par certains problèmes récurrents en programmation.<br />
Ils sont issus des bonnes trouvailles et des bonnes pratiques de générations de développeurs et dispensent ainsi, comme on dit souvent, de réinventer le fil à couper la roue.</p>
<p>J&#8217;avais commencé un paragraphe complet donnant un exemple (en choisissant le pattern <em>bridge</em>, un modèle assez &laquo;&nbsp;simple&nbsp;&raquo;), et j&#8217;ai renoncé, car on ne peut pas en dire grand chose sans évoquer la programmation orientée objet, que ma chère maman n&#8217;est pas censée connaître, donc qui déborde le cadre de cette page.<br />
Je tâcherai de présenter en revanche dans un épisode prochain le <strong>MVC</strong>, un design pattern assez connu — qui est en fait, pour être rigoureux, une combinaison de patterns. Retenons juste ceci en attendant, et au risque de me répéter : il ne s&#8217;agit pas de classes ou de bouts de programme, mais de façons de structurer son modèle de données, son architecture, son application, et ultimement son code (quelque soit le langage objet).</p>
<p>En guise de conclusion, et pour s&#8217;éloigner définitivement d&#8217;Alexander, signalons qu&#8217;on parle aussi de temps en temps du négatif des patterns, les <strong>antipatterns</strong>.</p>
<p>Comme leur nom l&#8217;indique, il s&#8217;agit des façons de faire qui sont exactement ce qu&#8217;il faut éviter. On regroupe sous ce nom des pratiques hétérogènes aux noms parfois sympatoches, comme <em>la coulée de lave</em> (mise en production d&#8217;un code non stabilisé qui de fait devient de moins en moins modifiable, se &laquo;&nbsp;solidifiant&nbsp;&raquo; comme de la lave), <em>l&#8217;ancre de bateau</em> (code conservé pour des raisons &laquo;&nbsp;politiques&nbsp;&raquo;, pour ne pas fâcher un développeur et/ou en se disant qu&#8217;il servira plus tard&#8230;), ou <em>l&#8217;objet divin</em> (méthode ou fonction servant à trop de choses, et dont on finit par ne plus trop savoir comment elle marche).<br />
Elles sont évidemment, presque autant que les autres, utiles au développeur — qui aura toujours au début de son existence mis en œuvre, même à son corps défendant, au moins l&#8217;un d&#8217;eux, sinon presque tous.</p>
<p><em>Dans le prochain épisode, cette fois, on parlera de MVC&#8230;</em></p>
<p>___________________________________</p>
<p><em>Image du Schéma empruntée 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>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

