<?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; symfony</title>
	<atom:link href="http://www.do-as-i-say.com/notes/tag/symfony/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>La beauty de la poetry dans Symfony</title>
		<link>http://www.do-as-i-say.com/notes/2009/10/symfony-poetry/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/10/symfony-poetry/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 11:24:05 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[3. Sagesse et parts de flan]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[langage]]></category>
		<category><![CDATA[métaphore]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=947</guid>
		<description><![CDATA[Dans le développement web comme dans la programmation en général, on utilise  beaucoup de termes empruntés à l&#8217;anglais, dans des versions plus ou moins traduites ou transposées. Comme dans tout langage technique où on utilise, à plus ou moins bon escient, des termes d&#8217;origine étrangère, ça donne lieu dans les échanges oraux ou écrits à [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-971" style="border: 1px solid black;" title="La poésie, cbeautiful" src="http://www.do-as-i-say.com/notes/wp-content/uploads/poetry.jpg" alt="La poésie, cbeautiful" width="128" height="128" />Dans le développement web comme dans la programmation en général, on utilise  beaucoup de termes empruntés à l&#8217;anglais, dans des versions plus ou moins traduites ou transposées. Comme dans tout langage technique où on utilise, à plus ou moins bon escient, des termes d&#8217;origine étrangère, ça donne lieu dans les échanges oraux ou écrits à des phrases mélangeant allègrement des mots d&#8217;origines diverses, dans un melting-pot qui souvent frise le ridicule, mais parfois recèle une bonne dose de poésie (oui, bon, moi ça me parle, cette poésie, je sais bien que ça n&#8217;est pas forcément le cas de tout le monde, mais c&#8217;est comme ça).<br />
<span id="more-947"></span></p>
<p>Je n&#8217;aborderai pas ici le débat, en partie stérile, consistant à se demander s&#8217;il faut traduire ou non tous ces termes et/ou créer des équivalents en français quand il n&#8217;y a pas de mot existant. Une langue vivante est, comme son nom l&#8217;indique, <em>vivante</em> (eh ouaip, ne me remerciez pas), comme tout organisme elle mue, agrège des éléments, transforme de la matière en d&#8217;autres choses, et c&#8217;est très bien (mieux : c&#8217;est vital — une langue que ne bouge plus est, comme on le dit fort bien, une <em>langue morte</em>).</p>
<p>Non, je vais juste ici évoquer quelques uns des mots qu&#8217;on pratique beaucoup en <a href="http://www.sensiolabs.com" target="_blank">environnement professionnel</a>, ceux qui ont pour mon oreille un peu bizarre des résonances particulièrement drôles ou poétiques. Ça me donnera au passage l&#8217;occasion de parler un peu d&#8217;un framework que j&#8217;aime bien (voir <a href="http://www.do-as-i-say.com/notes/2009/08/framework-symfony-explique-a-ma-maman-1/" target="_blank">ici</a>, <a href="http://www.do-as-i-say.com/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/" target="_blank">ici</a>, ou <a href="http://www.do-as-i-say.com/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/" target="_blank">ici</a>). On pourrait appeler cette liste &laquo;&nbsp;les 10 termes à connaître pour <em>speaker</em> fluemment le Symfony <em>in </em>le texte&nbsp;&raquo;.</p>
<ul>
<li><strong>autoload </strong>: ne me demandez pas pourquoi celui-là me plait, il y a des chances que ça ait à voir avec Goldorak (autolargue, quoi).  En ce qui nous concerne, l&#8217;autoload est une fonctionnalité un petit peu magique qui dispense le développeur d&#8217;inclure explicitement chacun des fichiers définissant les classes dont il a besoin, le framework (chez nous, c&#8217;est <a href="http://www.symfony-project.org">Symfony</a>, des fois que je ne l&#8217;aurais pas dit) se chargeant à chaque nouvelle instanciation d&#8217;objet de fouiller les répertoires qui vont bien à la recherche du fichier nécessaire et de l&#8217;inclure dans votre dos sans que vous ayiez à vous en soucier.</li>
<li><strong>bootstraping </strong>: souvent utilisé dans un <a href="http://www.do-as-i-say.com/notes/2009/09/les-10-termes-a-connaitre-pour-etre-un-bon-chef-de-projet/" target="_blank">discours de vérité</a> pour en jeter un max, le <em>bootstraping</em> est littéralement laçage de chaussure (ou serrage de sangle de botte&#8230;) Les <em>bootstrap</em>s sont concrètement des anneaux cousus sur le rebord des bottes, qu&#8217;on utilise pour s&#8217;aider à les chausser. En anglais courant, le verbe <em>bootstrap</em> signifie d&#8217;ailleurs &laquo;&nbsp;se débrouiller tout seul&nbsp;&raquo;. Pour la fine bouche, signalons que dans la littérature anglaise le verbe est également une référence aux aventures du baron de Münchhausen qui, embourbé dans un marécage, s&#8217;en sort en se tirant lui-même par ses bottes pour se propulser dans les airs&#8230;<br />
&laquo;&nbsp;Bootstraper&nbsp;&raquo;, puisqu&#8217;on l&#8217;utilise bien entendu comme verbe francisé, consiste à démarrer le boulot en en prémâchant l&#8217;essentiel, pour obtenir rapidement une base pouvant servir au développement d&#8217;une application plus puissante par la suite.</li>
<li><strong>cécé </strong>: ou &laquo;&nbsp;cici&nbsp;&raquo;, si on le fait à l&#8217;anglaise ; abbréviation et alias de la commande Symfony clear-cache (puis plus récemment cache:clear) utilisée pour <em>clearer</em> le cache (le vider, quoi). On doit entendre chez Sensiolabs environ 167 fois par jour &laquo;&nbsp;t&#8217;as fait un cécé ?&nbsp;&raquo;.</li>
<li><strong>crud </strong>: à prononcer &laquo;&nbsp;crude&nbsp;&raquo;, ou &laquo;&nbsp;creude&nbsp;&raquo;, bien sûr. Acronyme de Create-Retrieve-Update-Delete, qui sont les quatre fonctions de base d&#8217;une interface simple d&#8217;administration de données.</li>
<li><strong>fixtures : </strong>toujours un peu difficile à dire pour les français, les <em>fikstcheurzes</em> sont des données servant à tester et/ou initialiser une application, stockées dans un format simple à éditer et à utiliser pour des injections automatiques (voir <em>populate</em> plus bas).</li>
<li><strong>helper </strong>: j&#8217;aime bien l&#8217;idée d&#8217; &laquo;&nbsp;aideurs&nbsp;&raquo; (j&#8217;imagine que l&#8217;administration nous ferait dire &laquo;&nbsp;aidants&nbsp;&raquo;) qui avec leur petits bras muskés font des trucs pour toi. Un <em>helper</em> est en effet une petite fonction destinée en général à retourner du code HTML répétitif, construit avec des paramètres ou propriétés d&#8217;un objet qu&#8217;on lui passe.</li>
<li><strong>hydrate : </strong>liquide et poétique image qui touche au sublime : &laquo;&nbsp;hydrater un objet&nbsp;&raquo; consiste à lui attribuer des valeurs qu&#8217;on a récupérées en vrac par ailleurs (pour faire très simple), cette attribution devant être &laquo;&nbsp;intelligente&nbsp;&raquo;, c&#8217;est-à-dire qu&#8217;elle doit faire correspondre à la bonne propriété la bonne valeur. On peut &laquo;&nbsp;hydrater à la main&nbsp;&raquo;, ce qui n&#8217;a rien à voir avec une crème de jour, ou recourir à des fonctions qui <a href="http://www.symfony-project.org/cookbook/1_2/en/retrieving_data_with_doctrine#chapter_f6fc97d827760d5157133eaf9798ddaf_array_hydration" target="_blank">mâchent le travail</a>.</li>
<li><strong>populate </strong>: autre métaphore que j&#8217;affectionne particulièrement, qu&#8217;on emploie un peu indifféremment en anglais ou dans sa version française ( &laquo;&nbsp;peupler&nbsp;&raquo;, ou le néologique &laquo;&nbsp;populer&nbsp;&raquo;). <em>Peupler </em>une base de données consiste à lui injecter des données de tests ou des données initiales nécessaires à l&#8217;application (utilisateurs, contenus de départ&#8230;) ; pour faciliter la vie des développeurs, il existe dans Symfony des façons d&#8217;automatiser cette action pour pouvoir la répéter en deux coups de cuiller à pot et insérer des <em>fixtures</em> en une seule commande.<br />
Il existe aussi la variante &laquo;&nbsp;<strong>repeupler</strong>&laquo;&nbsp;, qui désigne le fait de réafficher les données saisies par l&#8217;utilisateur dans un formulaire s&#8217;il contient des erreurs ou doit être complété. On a tous un jour expérimenté la douleur de l&#8217;absence de repopulation, quand on a passé du temps à remplir un formulaire, qu&#8217;on valide, qu&#8217;il est refusé pour une quelconque raison, mais est réaffiché tout vide, et qu&#8217;on doit tout ressaisir&#8230; Vous pourrez maintenant hurler &laquo;&nbsp;IL N&#8217;A PAS ÉTÉ REPEUPLÉ, BORDEL DE M&#8230; !&nbsp;&raquo;</li>
<li><strong>routing </strong>: celui-là aussi on le traduit peu (le &laquo;&nbsp;routage&nbsp;&raquo; gardera quoiqu&#8217;on en dise toujours une connotation de service postal). Le routing est le mécanisme qui réécrit et/ou traduit les urls (selon le sens où on le regarde) pour permettre de paramétrer des adresses, comme on dit, plus sympathiques pour les utilisateurs et les moteurs de recherche (respectivement : <em>user-friendly</em>, et <em>search-engine-friendly</em> ; ouéééé, copaaaing !) Il est lié à ce qu&#8217;on appelle la réécriture d&#8217;url, qu&#8217;on dit très souvent à l&#8217;anglaise aussi : l&#8217;<em>iouharelle riraïtingue</em>.</li>
<li><strong>sandbox </strong>: littéralement &laquo;&nbsp;bac à sable&nbsp;&raquo;, désigne une mode autonome de distribution d&#8217;une application, pour faciliter son installation et permettre des tests où les risques d&#8217;impact pour le reste du serveur sont limités sinon nuls. En d&#8217;autres termes : pour faire joujou dans son bac à sable où on peut tout crader sans gêner personne.</li>
<li><strong>scaffolding </strong>: image très sympathique, qu&#8217;on pourrait traduire par &laquo;&nbsp;échaufadage&nbsp;&raquo;. Assez proche du <em>bootstraping</em>, le <em>scaffolding</em> est plus spécifiquement lié à la façon d&#8217;exploiter la structure d&#8217;une base de données. Il se base sur une description formalisée de cette structure (dans <a href="http://www.symfony-project.org/book/1_2/08-Inside-the-Model-Layer#chapter_08_sub_beyond_the_schema_yml_the_schema_xml" target="_blank">Symfony, par exemple</a>, dans un fichier <em>schema.yml</em>) pour générer automatiquement une interface d&#8217;administration <em>crud </em>(voir plus haut). C&#8217;est ce que fait le bien nommé <em>admin generator</em>,  affectueusement appelé <em>admin gen </em>(prononcez &laquo;&nbsp;admine jène&nbsp;&raquo;), dans Symfony. En quoi on peut dire : &laquo;&nbsp;l&#8217;<em>admin gen</em>, ça consiste à <em>bootstraper </em>ton <em>backoffice </em>en faisant du <em>scaffolding</em> avec des interfaces <em>crud&nbsp;&raquo;</em>. <em><br />
</em>Cpas <em>beautiful</em>, ça ?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/10/symfony-poetry/feed/</wfw:commentRss>
		<slash:comments>8</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>
		<item>
		<title>Symfony expliqué à ma maman, 1ère partie : qu&#8217;est-ce qu&#8217;un framework ?</title>
		<link>http://www.do-as-i-say.com/notes/2009/08/framework-symfony-explique-a-ma-maman-1/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/08/framework-symfony-explique-a-ma-maman-1/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 06:59:00 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[complexité]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[grammaire]]></category>
		<category><![CDATA[langage]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[orthographe]]></category>
		<category><![CDATA[pensée]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=103</guid>
		<description><![CDATA[A mes heures pas perdues je travaille dans l&#8217;agence qui est à l&#8217;origine d&#8217;une fort belle chose : un framework PHP 5 qui jouit d&#8217;une assez bonne presse, ce qui n&#8217;est pas complètement un hasard parce qu&#8217;il est vraiment très bien.
Ce framework porte le nom de Symfony, pour des raisons expliquées ici. Jusque là, fastoche. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-205" style="border: 1px solid black;" title="Maman je t'aime" src="http://www.do-as-i-say.com/notes/wp-content/uploads/symfony_me-150x150.png" alt="Maman je t'aime" width="128" height="128" />A mes heures pas perdues je travaille dans l&#8217;<a href="http://www.sensiolabs.com" target="_blank">agence</a> qui est à l&#8217;origine d&#8217;une fort belle chose : un framework PHP 5 qui jouit d&#8217;une assez bonne presse, ce qui n&#8217;est pas complètement un hasard parce qu&#8217;il est vraiment très bien.</p>
<p>Ce framework porte le nom de<a href="http://www.symfony-project.org" target="_blank"> Symfony</a>, pour des raisons expliquées <a href="http://www.symfony-project.org/book/1_2/01-Introducing-Symfony#chapter_01_sub_who_made_symfony_and_why" target="_blank">ici</a>. Jusque là, fastoche. C&#8217;est ensuite que ça se complique. Déjà, rien que le premier mot : <em>framework</em>. Littéralement, cadre ou structure ; dans la programmation en général, on le traduit plus précisément par &laquo;&nbsp;cadre d&#8217;applications&nbsp;&raquo;. Enfin, on le tradui<em>rait</em>, parce qu&#8217;on ne le fait jamais, on dit toujours <em>frèmeouorque</em>. A compter de cette phrase, je dirai d&#8217;ailleurs &laquo;&nbsp;framework&nbsp;&raquo; sans autre forme de procès, et même sans italiques (je suis comme ça, jsuis un gueudin).</p>
<p><span id="more-103"></span></p>
<p>Pour commencer, donc, qu&#8217;est-ce qu&#8217;un framework ? S&#8217;il y avait une réponse simple, on se passerait de ces lignes. La difficulté majeure tient à ce qu&#8217;il y a en fait dans la définition deux dimensions principales, complémentaires mais en partie indépendantes : <strong>un framework c&#8217;est à la fois une boîte à outils et une méthodologie. </strong>Ou, si on n&#8217;a pas peur des envolées lyriques : une boîte à outils fournie avec une philosophie.</p>
<h3>Une boîte à outils</h3>
<p>On a l&#8217;habitude de comparer  un framework à un ensemble des &laquo;&nbsp;briques&nbsp;&raquo; toutes faites qu&#8217;on peut utiliser pour son application .<br />
Si l&#8217;analogie n&#8217;est pas trop mauvaise, elle est insuffisante, parce qu&#8217;un framework c&#8217;est plus que ça. Cela dit, l&#8217;image de &laquo;&nbsp;brique&nbsp;&raquo; convient assez bien à ce qui circule çà et là sous le nom de <em>composants </em>(et d&#8217;ailleurs, le monde est bien fait, car certaines parties de Symfony sont justement mises à disposition comme composants : <a href="http://components.symfony-project.org" target="_blank">http://components.symfony-project.org</a> ; dingue, hein ?)</p>
<p>Mais revenons à l&#8217;analogie de départ, même si elle est un peu faible ; elle  dit qu&#8217;<strong>un framework est à un développeur ce qu&#8217;une boîte à outils est à un bricoleur</strong>.</p>
<p>Sous plusieurs aspects, un framework peut effectivement fonctionner comme une boîte à outils, en ce sens qu&#8217;il propose, dans le cas de Symfony du moins, un certain nombre de <em>trucs </em>pour faciliter le travail, l&#8217;accélérer, voire automatiser tout ou partie des tâches qu&#8217;on rencontre lors du développement d&#8217;une application web. C&#8217;est le côté <strong>work</strong> du framework, si l&#8217;on veut.<br />
Enfoncer un clou, à la main, c&#8217;est douloureux et très long ; avec une pierre, moins douloureux, mais pas très précis. Avec un marteau, l&#8217;outil est assez optimal &#8211; même s&#8217;il ne dispense toutefois pas de taper. En plus, ce marteau a été testé industriellement, donc a de bonnes garanties de solidité .</p>
<p>Dans le développement web, on ne plante pas des clous, mais il y a des tâches équivalentes qui sont répétitives, peu gratifiantes, et d&#8217;autant plus sujettes à erreur qu&#8217;elles sont répétitives et peu gratifiantes : construction de bases de données à partir de leur schéma, import de données de test, initialisation d&#8217;interfaces d&#8217;administration, exécution de tests, gestion du cache, des urls&#8230;</p>
<p>Pour tout ça, le framework offre marteaux et tournevis, voire dans certains cas pistolets à clous. Ces &laquo;&nbsp;utilitaires&nbsp;&raquo;,  testés et mis à l&#8217;épreuve du feu par de nombreux développeurs, ont bénéficié de leurs retours d&#8217;expérience, leur efficacité et stabilité sont assurées par ce processus. Mais pas plus qu&#8217;un marteau ils ne dispensent pas de taper. Vous pouvez vous procurer une belle boîte à outils, ça ne fixera pas pour autant vos étagères au mur &#8230;</p>
<p>A un niveau un peu plus complexe, le framework (du moins Symfony) favorise  l&#8217;intégration en deux coups de cuiller à pot de <strong><em>plug-ins</em></strong>, qui sont un peu comme les briques évoquées plus haut. Il en existe un grand nombre, pour des fonctionnalités plus ou moins évoluées (authentification, gestion de médias, de contenu&#8230;). On dépasse là le cadre de la &laquo;&nbsp;boîte à outils&nbsp;&raquo;, et on est plutôt sur des objets de base qui font gagner du temps. C&#8217;est comme acheter des planches déjà découpées plutôt que de les scier soi-même. Mais ces objets conviennent rarement tels quels . Il faut les adapter à ses besoins. Par exemple peindre ses planches de la couleur qui va bien, choisir combien on en pose, à quelle distance les unes des autres&#8230;</p>
<p>Point crucial : dans le cas du framework, l&#8217;adaptation sera grandement facilitée par la <em>méthodologie</em> qui doit avoir été respectée par les créateurs des plug-ins. C&#8217;est-à-dire : <em>si </em>elle a été respectée.</p>
<p>Ce qui nous fait une transition toute trouvée pour le second aspect, non des moindres, de la définition d&#8217;un framework : en plus d&#8217;être une boîte à outils, un framework, c&#8217;est une façon de travailler.</p>
<h3>Une méthodologie</h3>
<p>Pour tenter une analogie, disons qu&#8217;<strong>un framework est à la programmation ce que grammaire et orthographe sont à la pensée</strong>.</p>
<p>On quitte là le champ lexical du bricolage pour celui de la linguistique, ou plutôt de l&#8217;apprentissage du langage . Glissement qui semble tout indiqué, puisqu&#8217;on parle de <em>langage</em> de programmation. Si on fouille un peu, on verra même que la nécessité de changer de champ répond en fait à une exigence interne, dictée par le caractère spécial des  langages artificiels : un croisement génétique, pour ainsi dire, entre de la logique (qui se veut mécanique et déterministe) et de la pensée (qui reste inductive et poétique par nature, mais c&#8217;est une autre histoire).</p>
<p>Filons la métaphore.<strong> </strong>Quand on se met à programmer, on apprend une syntaxe, des fonctions, des mots-clés&#8230; ; bref, une sorte de grammaire et de dictionnaire .<br />
Mais connaître par cœur l&#8217;intégral de la phpdoc ou autre n&#8217;a jamais fait un bon développeur, pas plus que réciter le Bescherelle n&#8217;a fait un grand auteur.</p>
<p>C&#8217;est là que, tel un cavalier qui surgit hors de la nuit (mince, ça y est maintenant j&#8217;ai la musique de Zorro dans la tête), intervient le framework. Il joue un rôle à la croisée de la rhétorique, de la littérature et de la logique :</p>
<ul>
<li> il énonce des conventions d&#8217;écriture et d&#8217;organisation destinées à rendre plus efficace, en homogénéisant et clarifiant</li>
<li>il s&#8217;inspire des bonnes pratiques déjà existantes, notamment en termes de style </li>
<li>il structure et favorise la discipline du code produit, et son indépendance à l&#8217;égard de toute solution logicielle ou matérielle.</li>
</ul>
<p>En gros, il joue son rôle de &laquo;&nbsp;cadre&nbsp;&raquo; et de structure. C&#8217;est le côté <strong>frame<strong> </strong> </strong>du framework : il <strong>contraint</strong> à un certain nombre de choses, mais pour mieux <strong>libérer</strong> le processus intellectuel, en particulier en l&#8217;affranchissant des routines chronophages, et en aidant, par la clarté exigée, à faire face à l&#8217;augmentation de la <em>complexité </em>.</p>
<p>Si tout développeur qui connait un tant soit peu un langage (PHP en particulier, qui est plus facile d&#8217;accès que d&#8217;autres) est capable, même en tâtonnant, de mettre au point une application plus ou moins évoluée, l&#8217;expérience montre toutefois que son degré d&#8217;instabilité croît alors exponentiellement à la mesure de sa complexité, et que son code a tendance à devenir incompréhensible (et donc instable, indébuggable, non maintenable, etc&#8230;)</p>
<p>Pour<strong> faire face à la complexité</strong>, il faut être équipé de certains outils, intellectuels cette fois. Un framework a pour but de fournir de tels outils facilitant la modélisation des objets, de leurs relations, et des solutions aux problèmes posés. Il est à la fois une extension du vocabulaire du développeur et un perfectionnement de ses capacités grammaticales.<br />
Du moins, il <strong>peut </strong>l&#8217;être. Car comme le marteau ne tape pas tout seul, le framework ne pense à la place de personne. Pire, comme un marteau, mal utilisé, il peut faire mal. Et s&#8217;il tend à structurer, il n&#8217;oblige ultimement personne à suivre sa méthodologie ; s&#8217;il peut aider à discipliner, il ne remplace pas l&#8217;auto-discipline qui est du ressort de ceux qui conçoivent et écrivent le code. Bref : un framework ça n&#8217;est pas la pierre philosophale qui changera votre code de plomb en or.</p>
<p>On se résume : côté pile, le <em><strong>frame</strong></em>work est un cadre structurant, côté face, le frame<em><strong>work</strong></em> est un outil facilitant le travail.<br />
Finalement, on avait bien raison de garder le mot anglais.</p>
<p><em>Dans le prochain épisode, on parlera de design patterns&#8230;<br />
</em></p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/08/framework-symfony-explique-a-ma-maman-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

