<?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>La Case de l&#039;Oncle Tom &#187; pear</title>
	<atom:link href="http://case.oncle-tom.net/tag/pear/feed/" rel="self" type="application/rss+xml" />
	<link>http://case.oncle-tom.net</link>
	<description>Développement Web, bonnes pratiques et performances</description>
	<lastBuildDate>Sun, 25 Dec 2011 19:33:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="search"
           href="http://case.oncle-tom.net/opensearch"
           type="application/opensearchdescription+xml"
           title="Content Search" />		<item>
		<title>Conventions de programmation : la nécessaire maturité</title>
		<link>http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/</link>
		<comments>http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 05:00:04 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[coding standards]]></category>
		<category><![CDATA[conventions]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpdoc]]></category>
		<category><![CDATA[symfony]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1014</guid>
		<description><![CDATA[Tout développeur, que ce soit à l&#8217;école ou en apprenant sur le tas, écrit du code. J&#8217;espère n&#8217;avoir perdu personne à ce stade de l&#8217;explication Inconsciemment on cherchera à utiliser un style d&#8217;écriture avec lequel on se sent à l&#8217;aise, qu&#8217;on pourra et saura relire facilement et dans le meilleur des cas, qui pourra être [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img class="size-full wp-image-1028" title="Exemple de code PHP" src="http://case.oncle-tom.net/images/2008/07/sample-php-code.png" alt="Exemple" width="500" height="184" /></p>
<p>Tout développeur, que ce soit à l&#8217;école ou en apprenant sur le tas, écrit du code. J&#8217;espère n&#8217;avoir perdu personne à ce stade de l&#8217;explication <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Inconsciemment on cherchera à utiliser un style d&#8217;écriture avec lequel on se sent à l&#8217;aise</strong>, qu&#8217;on pourra et saura relire facilement et dans le meilleur des cas, qui pourra être relu par une autre personne sans avoir à engager d&#8217;interprète.</p>
<p>Tout développeur tend donc à utiliser des <a href="http://fr.wikipedia.org/wiki/Convention_de_nommage_(programmation)">conventions de programmation</a> (<em>coding standards</em>), que ce soit en <acronym title="HyperText Markup Language">HTML</acronym>, <acronym title="Pre-Hypertext Processing">PHP</acronym>, <acronym title="Cascading Style Sheets">CSS</acronym>, JavaScript ou même en Cobol. Et <strong>utiliser des conventions, c&#8217;est bien</strong> !</p>
<p><span id="more-1014"></span></p>
<h3>Quelle convention de nommage adopter ?</h3>
<p>Avant de choisir une convention, encore faudrait-il savoir quelles conventions existent :</p>
<ul>
<li>pas de convention</li>
<li><a href="http://fr.wikipedia.org/wiki/Notation_hongroise">convention hongroise</a></li>
<li><a href="http://pear.php.net/manual/fr/standards.php">convention PEAR</a></li>
<li><a href="http://www.symfony-project.org/book/1_0/02-Exploring-Symfony-s-Code">convention symfony</a></li>
<li><a href="http://framework.zend.com/manual/fr/coding-standard.html">convention Zend Framework</a></li>
<li><a href="http://codex.wordpress.org/WordPress_Coding_Standards">convention WordPress</a> (que j&#8217;abhorre)</li>
<li>etc.</li>
</ul>
<p>Autant dire qu&#8217;il y a de tout et pour tous les goûts.<br />
Ce qu&#8217;il faut retenir d&#8217;<strong>une convention c&#8217;est qu&#8217;elle explicite des règles de développement</strong> :</p>
<ul>
<li>sur le nommage des éléments</li>
<li>sur l&#8217;indentation des éléments</li>
<li>sur les structures de contrôle (if, else, tout ça quoi)</li>
<li>sur la syntaxe des commentaires</li>
<li>sur la syntaxe de la documentation (le code auto-documenté c&#8217;est bon !)</li>
<li>sur l&#8217;organisation des fichiers, éventuellement</li>
</ul>
<p>C&#8217;est pour ça que partir sur une <strong>convention parfaite sur le papier mais inapplicable est une vaste fumisterie</strong>. L&#8217;idéal étant de pouvoir reprendre du code dans un projet sans avoir eu besoin de lire la documentation pour en comprendre l&#8217;organisation.</p>
<p>Mon conseil : <strong>essayez, choisissez</strong> mais ne prenez pas non plus trop laxiste en terme de notation.<br />
Une chose est sure : quand on a essayé une belle</p>
<h3>Mes conventions de nommage en <acronym title="Pre-Hypertext Processing">PHP</acronym></h3>
<p style="text-align:center"><a href="http://case.oncle-tom.net/images/2008/07/eclipse-php-code-sample.png"><img class="size-medium wp-image-1022" title="Exemple de code PHP dans Eclipse" src="http://case.oncle-tom.net/images/2008/07/eclipse-php-code-sample-300x207.png" alt="Exemple de code PHP dans Eclipse" width="300" height="207" /></a></p>
<p>J&#8217;avoue, la notation utilisée dans <a href="http://www.symfony-project.org/">symfony</a> m&#8217;a tellement plu que je la réutilise quasiment partout. Ci-dessus, une illustration montrant du code pour un <a href="http://case.oncle-tom.net/code/wordpress/">plugin WordPress</a> (en <acronym title="Pre-Hypertext Processing">PHP</acronym> 4 malheureusement &#8230;). Elle en présente un bon aperçu.</p>
<h4>Notation</h4>
<p>J&#8217;utilise UpperCamelCase pour le nommage des classes <em>sauf</em> s&#8217;il y a un préfixe qui, lui, reste en minuscule.<br />
<em>Exemples</em> : <code>class AmazonWidgetsShortcodes</code>, <code>class sfUploader</code>.</p>
<p>Pour ce qui est méthodes de classes, j&#8217;utilise lowerCamelCase. Comme ça on sait qu&#8217;on reste dans un objet et c&#8217;est pas plus mal.</p>
<p>Enfin, pour les fonctions orphelines, <em>helpers</em> &amp; cie, c&#8217;est tout en minuscule séparé par des underscore (un nom particulier à ça ? <em>lowered_and_underscored</em> ? <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )<br />
<em>Exemple</em> : <code>add_filter()</code></p>
<h4>Indentation</h4>
<p>Dans l&#8217;indentation il y a 2 camps : celui des espaces et celui des tabulations.</p>
<p>J&#8217;ai suivi celui des <strong>espaces</strong> pour une simple et bonne raison : 1 tabulation a une taille différente selon les éditeurs, que ça soit votre IDE, votre shell ou n&#8217;importe quel logiciel de texte. L&#8217;idéal est d&#8217;avoir un rendu identique dans tous les éditeurs sans paramétrage.</p>
<p>En revanche, là encore je suis mais j&#8217;aime, je suis sur une <strong>tabulation à 2 espaces</strong> : c&#8217;est bête mais je trouve ça plus esthétique et on arrive moins rapidement à la limite de 80 caractères.</p>
<p>Cette &laquo;&nbsp;limite&nbsp;&raquo; n&#8217;est que virtuelle mais ouvrez un terminal, 80 lignes par défaut. C&#8217;est plus confortable de rester en-dessous de ce nombre. Ceci dit je fais quelques exceptions, des fois <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Structures de contrôle</h4>
<p>On pourrait résumer à <cite>1 ligne = 1 action</cite> et 2 types d&#8217;utilisation.</p>
<p>Tout d&#8217;abord les structures dans le code à proprement parler :</p>
<ul>
<li>un espace entre l&#8217;opérateur et la parenthèse ouvrante</li>
<li>un retour à la ligne à chaque accolade</li>
<li>pas d&#8217;espaces dans les lignes vides (résidus d&#8217;indentation)</li>
<li>systématiquement les accolades, même en cas de ligne unique après l&#8217;opérateur</li>
<li>opérateur ternaire quand ça reste simple, pas trop long et plus lisible</li>
</ul>
<p>Côté templating en revanche j&#8217;utilise la <a href="http://fr.php.net/manual/fr/control-structures.alternative-syntax.php">syntaxe alternative de <acronym title="Pre-Hypertext Processing">PHP</acronym></a> à raison d&#8217;un opérateur par ligne :</p>
<pre><code class="php">&lt;ol class="posts"&gt;
&lt;?php foreach($posts as $post): ?&gt;
  &lt;li id="post-&lt;?php echo $post-&gt;getId() ?&gt;"&gt;
    &lt;a href="&lt;?php $post-&gt;getPermalink() ?&gt;"&gt;
      &lt;?php echo $post-&gt;getTitle() ?&gt;
    &lt;/a&gt;
  &lt;/li&gt;
&lt;?php endforeach ?&gt;
&lt;/ol&gt;</code></pre>
<h4>Syntaxe de la documentation</h4>
<p>Enfin, pour terminer sur la partie <acronym title="Pre-Hypertext Processing">PHP</acronym>, <a href="http://www.phpdoc.org/">PHPDoc</a> est surpuissante en plus d&#8217;être simple à utiliser. Comble du bonheur, sa syntaxe est réutilisable dans d&#8217;autres langages.</p>
<p>PHPDoc est le principe du <strong>code autodocumenté</strong> :</p>
<ol>
<li>vous commentez votre code avec la syntaxe PHPDoc</li>
<li>vous générez sa documentation avec le programme PHPDoc (en <acronym title="HyperText Markup Language">HTML</acronym>, <acronym title="Portable Document Format">PDF</acronym> etc.)</li>
</ol>
<p>L&#8217;idéal est de <strong>documenter en même temps qu&#8217;on produit le code</strong>. Par principe on revient rarement sur son propre code juste pour le loisir de le décrire, par manque de temps ou par flemme.</p>
<h3>Mes conventions de nommage en JavaScript</h3>
<p style="text-align:center"><a href="http://case.oncle-tom.net/images/2008/07/eclipse-javascript-code-sample.png"><img class="size-medium wp-image-1021" title="Exemple de code JavaScript dans Eclipse" src="http://case.oncle-tom.net/images/2008/07/eclipse-javascript-code-sample-300x288.png" alt="Exemple de code JavaScript dans Eclipse" width="300" height="288" /></a></p>
<p>Ne vous inquiétez pas, je ne vais pas tout recommencer pour JavaScript <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Je suis à peu près la même logique qu&#8217;en <acronym title="Pre-Hypertext Processing">PHP</acronym> à part pour les accolades.</p>
<p>En effet si je conserve un comportement similaire pour les structures de contrôles (1 accolade par ligne) :</p>
<ul>
<li>je ne fais pas de retour à la ligne sur les accolades/parenthèse ouvrante d&#8217;une fonction/objet anonyme</li>
<li>je ne fais pas de retour à la ligne après une accolade/parenthèse fermante s&#8217;il y a une virgule ou parenthèse après</li>
</ul>
<pre><code class="javascript">var OncleTom = {
  age:      25,
  pensee:   function(){
    return this.age * Math.random()
  }
};</code></pre>
<h3>Mes conventions de nommage en <acronym title="Cascading Style Sheets">CSS</acronym></h3>
<p style="text-align:center"><img class="aligncenter size-full wp-image-879" title="Folding en CSS" src="http://case.oncle-tom.net/images/2008/02/css-folding.png" alt="" width="500" height="138" /></p>
<p>Inutile de paraphraser ce que j&#8217;ai déjà écris dans mon article sur les <a href="http://case.oncle-tom.net/2008/02/26/bonnes-pratiques-codage-css/">bonnes pratiques de codage <acronym title="Cascading Style Sheets">CSS</acronym></a>.</p>
<p>Deux lectures en une oui <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Conclusion</h3>
<p>Bon au final on voit que ce n&#8217;est pas si compliqué que ça d&#8217;apporter un brin de rigueur.<br />
On pourra même s&#8217;amuser à compléter le tout par la disposition des méthodes et fonctions d ans un fichier par ordre alphabétique (j&#8217;en connais un que ça fera sourire <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).</p>
<p>Les vues <em>Outline</em> fournissent un plan du code et certains logiciels ne semblent pas disposer d&#8217;une fonction de tri. Et au cas où un jour vous n&#8217;auriez pas votre IDE favori sous le nez, ça ne mange pas de pain de fonctionner ainsi.</p>
<p style="text-align:center"><img class="size-full wp-image-1020" title="Plan de code dans Eclipse (Outline)" src="http://case.oncle-tom.net/images/2008/07/eclipse-outline.png" alt="Plan de code dans Eclipse (Outline)" width="334" height="288" /></p>
<p>Que l&#8217;on travaille seul à plusieurs, et à plus fortes raison dans ce dernier cas, l&#8217;utilisation de notations et conventions est un gage de qualité. Ça rend le travail plus facilement interopérable avec d&#8217;autres développeurs, plus facile à relire, plus facile à maintenir.</p>
<p><strong>Ça n&#8217;empêchera jamais des bugs</strong> ou de sortir du mauvais code mais c&#8217;est ça, c&#8217;est une autre histoire.</p>
<p>Enfin, j&#8217;aimerais terminer cet article en écrivant qu&#8217;il a fait l&#8217;objet d&#8217;une <a href="http://blog.damienalexandre.fr/index.php?post/2008/07/19/Mes-conventions-de-programmation">chaîne par le Padawan PHPiste Damien Alexandre</a>. C&#8217;était l&#8217;occasion de faire une réponse qui passe inaperçue <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Ça ne m&#8217;empêchera en revanche pas de refiler la patate chaude à <a href="http://prendreuncafe.com/blog/">NicoDePrendreUnCafé</a>, de tenter d&#8217;insuffler de l&#8217;activité au blog de <a href="http://lacot.org/blog">Xavier Lacot</a>, de Spipifier <a href="http://www.gasteroprod.com">Gastero Prod</a>, d&#8217;extirper une technique ninja pyjama à <a href="http://shiii.org/">remouk</a> et pourquoi pas lire avec attention l&#8217;avis pythonien de <a href="http://www.biologeek.com/journal/">David Larlet</a> ?</p>
<p>Et <em>just for fun</em>, un petit coup d&#8217;électrode à un de mes futurs étudiants, <a href="http://blog.thierry.poinot.fr/">Thierry Poinot</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Livre blanc sur les frameworks PHP : présentation et explications</title>
		<link>http://case.oncle-tom.net/2008/livre-blanc-frameworks-php-presentation-et-explications/</link>
		<comments>http://case.oncle-tom.net/2008/livre-blanc-frameworks-php-presentation-et-explications/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 05:00:55 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[admin generator]]></category>
		<category><![CDATA[bonne pratique]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[clever age]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[entreprises]]></category>
		<category><![CDATA[ez components]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[livre blanc]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[scaffolding]]></category>
		<category><![CDATA[symfony]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=926</guid>
		<description><![CDATA[Il existe 4 phases dans la vie d&#8217;un développeur : celle où il aime tout créer lui-même celle où il aime utiliser un outil déjà tout prêt celle où il aime concevoir son outil avec d&#8217;autres outils tout prêt celle où il aime que les autres conçoivent pour lui (mais là il est patron ou [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><a href="http://www.clever-age.com/veille/publications/livres-blancs/livre-blanc-frameworks-php-pour-l-entreprise.html"><img class="aligncenter size-full wp-image-927" title="Couverture du livre blanc «Frameworks PHP pour l\'entreprise»" src="http://case.oncle-tom.net/images/2008/06/couverture-livre-blanc.png" alt="Couverture du livre blanc «Frameworks PHP pour l\'entreprise»" width="141" height="200" /></a></p>
<p>Il existe 4 phases dans la vie d&#8217;un développeur :</p>
<ol>
<li>celle où il aime <strong>tout créer</strong> lui-même</li>
<li>celle où il aime <strong>utiliser un outil</strong> déjà tout prêt</li>
<li>celle où il aime <strong>concevoir son outil</strong> avec d&#8217;autres outils tout prêt</li>
<li>celle où il aime que <strong>les autres conçoivent pour lui</strong> (mais là il est patron ou armé d&#8217;une horde de stagiaires <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )</li>
</ol>
<p>Les <em>frameworks</em> font partie de cette troisième catégorie. Ils existent dans à peu près tous les langages : <acronym title="Cascading Style Sheets">CSS</acronym>, <acronym title="Pre-Hypertext Processing">PHP</acronym>, JavaScript, Java, C#, Python, Ruby etc.<br />
Mon discours portera sur les frameworks <acronym title="Pre-Hypertext Processing">PHP</acronym>, parce que c&#8217;est mon langage de prédilection mais aussi parce qu&#8217;un <a href="http://www.clever-age.com/veille/publications/livres-blancs/livre-blanc-frameworks-php-pour-l-entreprise.html">livre blanc sur les frameworks <acronym title="Pre-Hypertext Processing">PHP</acronym> pour l&#8217;entreprise</a> est récemment sorti. Il parlera aussi bien aussi bien aux décisionnels qu&#8217;aux développeurs, à leur compte ou pour celui d&#8217;une entreprise.<br />
<span id="more-926"></span></p>
<h3>De l&#8217;intérêt d&#8217;utiliser un framework</h3>
<p>Un <em>framework</em> est littéralement ce que l&#8217;on peut appeler un socle logiciel : il propose des fonctionnalités de base et vous les utilisez pour concevoir votre propre application.</p>
<p>J&#8217;essaierai de faire court en énumérant une liste de quelques points à faire valoir dans l&#8217;utilisation d&#8217;un framework pour concevoir une application Web :</p>
<ul>
<li><strong>développement accéléré</strong></li>
<li><em>convention over configuration</em> : suivez les rails des conventions plutôt que de tout paramétrer</li>
<li><acronym title="Don't Repeat Yourself">DRY</acronym> : écrivez le code une fois et réutilisez-le pour éviter le copier-coller (sans parler des gains de maintenabilité)</li>
<li><strong>mutualisation du code</strong> : un même socle pour plusieurs applications</li>
<li>concentration du développement sur le <strong>code métier</strong></li>
<li>le framework vous décharge des tâches pénibles : sécurité, gestion des <acronym title="Uniform Resource Locator">URL</acronym>, gestion des permissions utilisateur, manipulation des bases de données, gestion du cache, accès aux fichiers etc.</li>
<li><strong>génération automatique</strong> d&#8217;interfaces (<em>admin generator</em>), de base de données (<em>ORM</em>), de modules/applications (<em>scaffolding</em>) etc.</li>
<li><strong>vecteur d&#8217;apprentissage</strong> individuel et collectif</li>
<li>bénéfices de tout le travail d&#8217;une communauté &#8230; et de celui que vous réinjecterez</li>
</ul>
<p><em>A contrario</em>, on pourra critiquer les frameworks pour leur plus forte consommation en ressources qu&#8217;un développement maison.<br />
Ce n&#8217;est évidemment pas une raison valable pour passer à côté d&#8217;autant plus qu&#8217;il existe de nombreuses solutions pour palier/réduire ce problème avec les gestionnaires de cache et les accélérateurs de code.</p>
<p style="text-align:center"><img class="aligncenter size-full wp-image-928" title="Exemple d'arborescence de projet symfony" src="http://case.oncle-tom.net/images/2008/06/exemple-application-symfony.png" alt="Exemple d'arborescence de projet symfony" width="344" height="474" /></p>
<h3>Framework <acronym title="Pre-Hypertext Processing">PHP</acronym> ou <acronym title="Content Management System">CMS</acronym> ?</h3>
<p>Maintenant vous me direz : <strong>pourquoi développer un logiciel avec un framework au lieu d&#8217;utiliser un bon <acronym title="Content Management System">CMS</acronym> des familles</strong> ou tout autre logiciel faisant son office ?<br />
Ce n&#8217;est à mon sens pas la bonne question à se poser : <strong>un framework n&#8217;est pas une fin en soi</strong>. Le choix du logiciel dépendra essentiellement du besoin, immédiat et futur. Vous aurez beau avoir le meilleur développeur d&#8217;un <acronym title="Content Management System">CMS</acronym> de votre pays, si le choix de la solution technique est déjà erroné, il ne suffira pas à éviter la catastrophe.</p>
<p>J&#8217;ai beaucoup accroché à cette formule le jour où je l&#8217;ai entendu : si vous estimez à au moins 50% l&#8217;utilisation de spécifiques dans une solution logicielle existante de type <acronym title="Content Management System">CMS</acronym>, vous faites fausse route. Le spécifique EST votre solution, le <acronym title="Content Management System">CMS</acronym> devient une simple fonctionnalité.<br />
Dans le cas d&#8217;un développement spécifique, le choix d&#8217;un framework est dans ce cas naturellement prescrit.</p>
<p>Dans tous les cas, <strong>ce sont vos besoins qui doivent vous guider vers le choix d&#8217;une solution</strong> et non l&#8217;inverse. Ne partez pas surtout d&#8217;une solution pour tenter d&#8217;y combler vos besoins.</p>
<h3>Les principaux frameworks <acronym title="Pre-Hypertext Processing">PHP</acronym></h3>
<p>Le <a href="http://www.clever-age.com/veille/publications/livres-blancs/livre-blanc-frameworks-php-pour-l-entreprise.html">livre blanc sur les frameworks <acronym title="Pre-Hypertext Processing">PHP</acronym></a> expose en détail les frameworks majeurs en <acronym title="Pre-Hypertext Processing">PHP</acronym> avec leurs avantages, inconvénients et surtout une <strong>grille comparative</strong> permettant de mettre à bout à bout leurs différentes fonctionnalités.</p>
<p>Toutefois on peut retenir ces noms de frameworks <acronym title="Pre-Hypertext Processing">PHP</acronym> :</p>
<ul>
<li><a href="http://cakephp.org/">CakePHP</a></li>
<li><a href="http://codeigniter.com/">CodeIgniter</a></li>
<li><a href="http://ez.no/fr/ezcomponents">EZ Components</a></li>
<li><a href="http://pear.php.net/">PEAR</a></li>
<li><a href="http://www.symfony-project.org/">symfony</a></li>
<li><a href="http://framework.zend.com/">Zend Framework</a></li>
</ul>
<p>On pourrait classer ces frameworks en 2 catégories :</p>
<ul>
<li>les <strong>briques logicielles</strong> : ils se présentent comme des briques indépendantes qu&#8217;on peut utiliser à souhait dans n&#8217;importe quel projet, y compris d&#8217;autres frameworks. C&#8217;est notamment le cas de <em>PEAR</em>, <em>EZ Components</em> et <em>Zend Framework</em> ;</li>
<li>les <strong>frameworks à proprement parler</strong> : ils imposent une structure particulière et des lignes directrices de développement pour être plus efficace. On citera dans ce cas <em>symfony</em>, <em>CodeIgniter</em> et <em>CakePHP</em></li>
</ul>
<h3>symfony : champion toutes catégories</h3>
<p style="text-align:center"><img class="size-full wp-image-929" title="Écran de première installation de symfony" src="http://case.oncle-tom.net/images/2008/06/symfony-first-install.gif" alt="Écran de première installation de symfony" /></p>
<p>Lors de la lecture du <a href="http://www.clever-age.com/veille/publications/livres-blancs/livre-blanc-frameworks-php-pour-l-entreprise.html">livre blanc sur les frameworks <acronym title="Pre-Hypertext Processing">PHP</acronym></a>, vous remarquerez très probablement que le framework <em>symfony</em> a tout pour plaire. C&#8217;est en effet à l&#8217;heure où j&#8217;écris ces lignes le framework <acronym title="Pre-Hypertext Processing">PHP</acronym> le plus abouti et le plus intéressant à analyser.<br />
Il jouit d&#8217;une excellente réputation, d&#8217;une incroyable stabilité et d&#8217;une communauté très active, quantitativement et qualitativement parlant. Si on ne devait en garder qu&#8217;un, ça serait lui.</p>
<p>Pourquoi j&#8217;apprécie énormément symfony :</p>
<ul>
<li>une documentation fonctionnelle <strong>et</strong> une documentation de l&#8217;<acronym title="Application Programming Interface">API</acronym> complètes</li>
<li>utilisation intensive de fichiers <acronym title="Yet Another Markup Language"><acronym title="Yet Another Markup Language">YAML</acronym></acronym> pour le paramétrage</li>
<li>les fonctionnalités d&#8217;<strong>amin generator</strong>, de gestion de base de données avec l&#8217;ORM <a href="http://propel.phpdb.org/">Propel</a> et les outils d&#8217;automatisation qui en découlent</li>
<li><strong>facilité d&#8217;intégration d&#8217;Ajax</strong> sans pondre une seule ligne de JavaScript</li>
<li>grand confort de développement</li>
<li>des conventions inspirées des plus grands (Ruby on Rails, Django etc.)</li>
</ul>
<h3>Conclusion</h3>
<p>Développeurs : <strong>renseignez-vous et intéressez-vous à au moins un framework</strong>. C&#8217;est bien pour le CV et vous gagnerez du temps.<br />
Décideurs : <strong>exigez de savoir quelle solution on vous préconise</strong> et surtout, pourquoi celle-là. À plus forte raison si votre projet comporte beaucoup de besoins spécifiques, demandez s&#8217;il s&#8217;agit d&#8217;un framework et si ce n&#8217;est pas le cas, pourquoi ça n&#8217;a pas été envisagé. Vous gagnerez aussi du temps et j&#8217;espère de l&#8217;argent.</p>
<p><strong>Les frameworks sont aujourd&#8217;hui partout</strong> et ont acquis une certaine maturité. Ces lettres de noblesse les rendent utilisables aussi bien pour des petits besoins que ceux d&#8217;entreprises, peu importe leur taille. Les gains de temps et l&#8217;incitation à la production de qualité sont des facteurs non-négligeables pour la pérennité de vos applications.<em></em></p>
<p><em>Attention</em> toutefois : un mauvais développeur et/ou une mauvaise conception prédomineront toujours. Votre fromage industriel aura toujours le même goût, peu importe la qualité du pain <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Je radote mais j&#8217;espère que vous trouverez suffisamment d&#8217;informations pour vous convaincre dans le <a href="http://www.clever-age.com/veille/publications/livres-blancs/livre-blanc-frameworks-php-pour-l-entreprise.html">livre blanc des frameworks <acronym title="Pre-Hypertext Processing">PHP</acronym> pour l&#8217;entreprise</a>. C&#8217;est ce genre de publications qui me font aimer la société dans laquelle je travaille <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/livre-blanc-frameworks-php-presentation-et-explications/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

