Critères de choix d'un framework PHP

Ingénierie web | Maîtrise d'œuvre | PHP

En tant que chef de projet dans une grosse structure, justifiant son poste par sa capacité à résoudre les problèmes qu'il a lui-même créés, vous êtes décidé à bâtir la prochaine application corporate sur un framework PHP. En plus des critères de choix déjà évoqués, vous veillerez à la présence de fonctionnalités qui permettent aux développeurs de se concentrer sur les particularités de l'application, en les libérant de l'écriture des briques de base :

  • Implémentation du design pattern MVC
  • Présence d'un module de logging
  • Contrôle total sur les URLs
  • Validation des formulaires
  • Gestion des accès aux bases de données
  • Implémentation de l'inversion de contrôle (IoC)
  • Gestion de l'internationalisation
  • Système de caching
  • Authentification et gestion des profils utilisateurs
  • Gestion de la montée en charge
  • Prise en compte de la sécurité (cross scripting, code injection, sql injection, vols de session, etc)
  • Système de communication entre les modules
  • Module Ajax

L'examen d'un certain nombre de framework (Zend Framework, CakePHP, Symfony Project, Seagull Framework, WACT, PHP on TRAX, ZooP Framework, Navigator, CodeIgniter) montre que se sont surtout des usines à gaz. Seul CodeIgniter sort du lot : il est très léger grâce aux modules indépendants, qui ne sont chargés qu'à la demande du contrôleur, mais il a le défaut de la rigidité des URLs. LE framework MVC est donc plus une collection de composants utilisables au sein d'un micro container. C'est la démarche de CodeIgniter et de Zend Framework, bien que ce dernier soit un peu plus complexe.

L'utilisation d'un framework nécessite toujours un investissement pour former les développeurs. Cet investissement sera d'autant plus important que le framework sera complexe. Cette complexité entrainera également des frais plus élevé de maintenance et d'évolution. Dans bien des cas, cet investissement est beaucoup plus rentable s'il est effectué dans le développement d'un micro-noyau maison...

Framework PHP MVC : pourquoi s'en passer

Ingénierie web | Maîtrise d'œuvre | PHP

Beaucoup plus populaire que les conteneurs implémentant l'inversion de contrôle, les frameworks MVC (Model-View-Controller ou Modèle-Vue-Contrôleur) en PHP sont légion. Ils participent de cette attente irrationnelle du monde PHP envers la programmation orientée objet et son corollaire, le framework. Seul Rasmus Lerdorf semble percevoir le comique de la situation avec son no-framework PHP MVC framework. Avant de vous décidez de démarrer votre prochain projet avec un tel framework, considérez d'abord les inconvénients suivants :

  • Une application moins performante. Les diverses couches d'abstraction et la panoplie impressionnante de composants accompagnant tout framework en font un mécanisme lourd, consommant beaucoup de ressources matérielles. La mise en production peut alors s'accompagner de l'achat, en urgence, d'un système de cache performant pour remédier aux performance déplorables. Rappelons-nous des difficultés de lancement du GéoPortail ou plus récemment les débuts difficiles du comparateur de prix des carburants du Minefi.
  • Coût de développement accrus. La complexité du framework induit des salaires plus élevés pour les développeurs spécialisés en raison de leur rareté ou des frais de formation (ou de perte de productivité) pour les autres développeurs. Ajoutez les frais de formation à un nouveau langage de script si le framework s'appuie sur un moteur de template style Smarty, très à la mode chez les développeurs PHP. Ces moteurs n'ont aucune utilité (si ce n'est de complexifier le développement) comme le montre bien l'article PHP for designers de Matt Mullenweg (co-fondateur et développeur principal de WordPress). Seule compte la séparation des préoccupations.
  • Une application bridée. Une autre conséquence de la complexité d'un framework est la difficulté de l'étendre ou de l'adapter à ses besoins particuliers.
  • Une application ne répondant pas aux besoins des utilisateurs. La plupart des framework font des choix radicaux en termes de conception grévant les fonctionnalités de l'application. L'exemple le plus simple : l'URL rewriting. L'URL d'une page est généralement de la forme http://my.web.com/module/action/params pour invoquer l'action action du module module. Aussi lorsque l'on souhaite créer un site web dont les URLs représentent l'architecture fonctionnelle du site, cela s'avère très compliqué ! Ainsi au lieu d'avoir l'URL http://www.numabilis.com/services/realisation_de_sites_web on a quelque chose comme http://www.numabilis.com/article/view/id/35. Le module de réécriture fourni est généralement insuffisant : les sections Services et Réalisations étant toutes deux constituées d'articles, la réécriture ne permet pas de distingués les articles de ces deux sections ! Comme souvent les couches techniques imposent des contraintes fortes sur le fonctionnel.

Les frameworks PHP, dans leur très grande majorité, souffrent d'une trop grande complexité. Ils singent le monde Java (voir les implémentations PHP de Struts : Phrame, PhpMVC ou Studs) en faisant du tout objet avec force renfort de template engine et de mod_rewrite.

Par conséquent, sauf si vous êtes chef de projet dans une grosse structure, dont le poste n'est justifié que par votre capacité à résoudre les problèmes que vous avez vous même créés, vous devriez vous passer d'un tel framework.


Dessin humoristique Veni Vidi Wiki
Veni Vidi Wiki (dessin de Brad Fitzpatrick)

Au-delà de MVC(2)

Ingénierie web | PHP

Le design pattern MVC est très à la mode dans le monde PHP. Beaucoup d'articles le présentent, mais peu en font comprendre l'essence. Ils passent généralement à côté de l'essentiel : la séparation des préoccupations.


MVC : la séparation des préoccupations

Inversion de contrôle en PHP : comment ne pas l'implémenter

Ingénierie web | PHP

L'inversion de contrôle (Inversion of Control, IoC) est un motif de conception (design pattern) devenu populaire, ces dernières années, avec l'adoption des conteneurs légers comme SpringFramework. Entendant leurs mérites tant vantés par les développeurs Java, des adeptes de PHP se sont fait un devoir d'implémenter un tel conteneur dans leur langage de prédilection. On trouve ainsi : Drip, Garden, Solar, Phemto, Seasar, ClawPHP et même WACT. C'est à mon avis alourdir considérablement le développement pour faire quelque chose que PHP sait faire naturellement. Je vous propose donc de découvrir ce qu'est l'inversion de controle et comment la mettre en place en PHP sans même l'implémenter concrètement.

Flux XML