Framework or not Framework

Astuces pour développeurs | 88 Commentaires | Wednesday 14 August 2013

Aujourd'hui je voulais vous parler des frameworks PHP et de la raison qu'il y a derrière le choix de l'utilisation d'un framework ou non. Le but ici ne sera pas de faire de l'évangélisation pure et simple, mais plutôt de donner mon point de vue et d'éclaircir les développeurs qui se poseraient encore des questions sur l'utilisation d'un framework.

Stop les tuto CakePHP c dla merde ! on veux du PHP Brut ça sert à rien les framework

C'est le genre de phrase typique que je vois de plus en plus dans les commentaires des vidéos. Ce type de message est toujours rigolo sachant que ces personnes utilisent déjà un framework sans s'en rendre compte.

Woot !? J'utilise déjà un framework ?

Même si vous codez en procédural ou en POO vous ne le savez pas mais vous utiliser déjà un framework. En effet au fur et à mesure de vos projets vous allez rencontrer des fonctions de plus en plus similaires et, à moins d'être masochiste, vous vous créerez vos propres fonctions à réutiliser. Ainsi, vous vous construisez une "librairie" d'outils et ainsi, sans vous en rendre compte, vous créez votre propre framework.

Mon code je l'aime, pourquoi utiliser le code d'un autre ?

Donc là vous vous dites sûrement "ben mon code que j'ai créé me va, pourquoi utiliser un framework". Lorsque vous utilisez vos librairies vous êtes beaucoup plus productif. Et de manière générale vous gagnez de plus en plus de temps à chaque projet. Maintenant imaginez des centaines de développeurs qui mettent en commun toutes leurs librairies et vous obtenez le principal intérêt d'un framework Open Source. Avoir un code testé et gérant un maximum de cas qui vous permettra de coder tous vos sites beaucoup plus rapidement (une fois le framework bien assimilé).

Les frameworks ouverts utilisent tous la même structure, la structure MVC (Model View Controller) qui est une structure éprouvée qui vous permet de séparer la partie présentation de la partie logique. Effectivement, cette méthode peut paraitre trop complexe au premier abord mais elle vous permet d'avoir un code plus propre et beaucoup plus simple à debuguer par la suite.

Enfin le dernier atout d'un framework c'est le travail en équipe. En effet, si vous travaillez à plusieurs sur un même framework c'est l'assurance que tout le monde code en suivant les mêmes conventions. Si votre projet utilise symfony 2 par exemple, vous savez qu'un dev Symfony 2 sera capable de travailler sur le code et comprendre le votre dès le premier jour. En revanche si vous utilisez votre propre framework le temps d'adaptation peut être plus long, et on prend le risque que chaque nouveau développeur rende la structure de moins en moins stable.

framework != Performances

L'aspect le plus décrié des framework reste les performances. Même si la plupart des frameworks n'incluent pas "trop" de librairies en se basant sur le principe du lazy loading, ils s'avèrent forcément plus gourmands qu'un code PHP Brut. Les performances peuvent être améliorée au fur et à mesure de la compréhension du fonctionnement du framework. Par exemple, sur CakePHP il sera impératif dès les premières lignes de limiter la récursivité de vos Model sous peine de voir le système faire des dizaines de LEFT JOIN non désirées.

Il y a une grosse partie optimisation à faire avant d'incriminer les frameworks à proprement parler (mise en place d'un système de Cache, Load Balancing…). On trouve des exemples de site à très très haut traffic qui utilisent des frameworks réputés "lents" et qui s'en sortent très bien. La preuve avec cette Conférence du développeur de YouPorn (SFW) qui explique comment le site arrive à survivre à 300 000 requêtes/s et plus de 100 Millions de pages vues avec Symfony 2.

D'une manière plus générale si vous arrivez à des proportions où le code PHP devient limitant c'est que vous pouvez commencer à investir dans une structure serveur plus robuste.

Ok je suis convaincu mais quel framework choisir ?

Cette question revient aussi très souvent et tout le monde essaie de trouver une réponse unique à grand coup d'argument et de benchmark foireux mais il n'y a pas selon moi un framework ULTIME. En effet, chaque framework propose sa vision des choses et sa façon de coder. Par exemple :

  • CakePHP se base sur la syntaxe/logique de RubyOnRail avec des conventions strictes pour écrire moins de code.
  • Symfony 2 utilise le "tout module" avec un code réutilisable au maximum.
  • Laravel propose un système de Facades pour proposer un code reposant sur des classes statiques (servant de façade à des singleton ou des objets).

Je pense que le choix du framework est avant tout une question de goût, à vous de voir la façon de fonctionner de chaque framework et celle qui vous semble la plus naturelle. Cependant certains autres élément sont à prendre en compte dans certains cas :

  • La communauté, un framework avec une grosse communauté c'est l'assurance de trouver des réponses en cas de problème. Si vous utilisez un framework utilisé par 10 développeurs vous risquez de galérer en cas de problème.
  • La version de PHP supportée, attention à prendre un framework qui va fonctionner sur votre configuration serveur. Si vous n'avez pas d'impératif côté serveur un framework ne supportant que PHP 5.3+ (ou 5.4+) est une bonne chose car cela veut dire qu'il utilise les dernières fonctionnalités de PHP
  • La fréquence des mises à jours. Alors là il y a un juste milieu à trouver. Il faut un framework qui soit mis à jour mais pas trop :D. Si les changements de versions majeures sont trop rapides il vous sera difficile de trouver des ressources sur la version que vous utilisez. Un framework rarement mis à jour peut contenir des bugs et des problèmes qui ne sont pas résolus rapidement.
  • L'état du marché, si votre optique est de trouver du travail avec les compétences que vous êtes en train de développer, choisir un framework demandé par le marché est une bonne stratégie (comparer sur des sites comme RemixJobs). Par exemple en France, Symfony 2 et Zend sont pas mal répandus.
Si avec ce choix vous ne trouvez pas votre bonheur :)

Ok mais pourquoi toi tu as choisi CakePHP ?

Alors si vous avez lu tous mes arguments vous vous demandez peut être pourquoi j'utilise CakePHP comme framework. Dans mon cas CakePHP est le premier framework PHP sur lequel j'ai travaillé (un professeur me l'a présenté pendant mes années de DUT) et depuis je n'ai jamais été limité par les fonctions, du coup je n'ai pas ressenti le besoin de passer sur un autre framework.

Malgré tout, j'ai testé un peu d'autres frameworks pour me faire une idée de ce qui se faisait ailleurs mais je n'ai jamais été totalement satisfait par les options proposées (dur d'oublier son premier amour, on compare toujours :)).

  • Symfony 2 m'intéressait car très répandu mais j'ai beaucoup de mal à accrocher au système du "tout bundle" et je trouve le code un peu effrayant au premier abord.
  • Laravel devient de plus en plus "hype" en ce moment donc dur de passer à côté. La syntaxe et la structure du code m'a vraiment plue, en revanche la fréquence des versions (une version prévue par an) m'effraie un peu pour la maintenance des sites.

Conclusion

Selon moi l'utilisation d'un framework pour la création de projet Web est indispensable et je ne m'imagine pas pouvoir créer une application sans en utiliser un. Après il est tout à fait envisageable de se créer un framework perso en inclueant seulement les fonctionnalités que l'on souhaite mais il faut alors réfléchir à l'interêt d'une telle démarche et voir si c'est rentable sur le long terme surtout si d'autres développeurs doivent intervenir sur le projet.