<?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; découplage</title>
	<atom:link href="http://www.do-as-i-say.com/notes/tag/decouplage/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>Mon, 26 Apr 2010 11:40:26 +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, 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>
	</channel>
</rss>
