Le futur de CakePHP ? – Nate Abele
La première présentation de la journée était très attendue car une annonce secrètement gardée allait être effectuée par Nate Abele, lead developer de CakePHP. Quelques mois auparavant, Nate avait lancé un appel à la communauté sur le google group de CakePHP pour savoir ce que chacun attendait du framework : « Poll: what do you hate about CakePHP? » … le principal retour des utilisateurs était le support de PHP4 et certains comportements du framework : voici donc venu le temps des changements !
Durant cette présentation Nate Abele a donc présenté une version expérimentale du framework ayant pour nom de code Cake3 (dont le code a été rendu public immédiatement après sur http://code.cakephp.org/cake3). Veuillez noter que le nom de cette version n’est pas « CakePHP 3″ mais bel et bien « Cake3″ afin de mettre en avant l’aspect expérimental du projet et le fait qu’aucune garantie n’est fournie. Cake3 est en effet une ré-écriture complète du framework en PHP 5.3, la toute dernière version du langage PHP sortie il y a peu et ayant fait une petite révolution dans le monde PHP ! Pour plus d’informations sur les nouveautés de PHP 5.3 je vous invite à lire le très bon article « Les nouveautés de PHP 5.3 – Developpez.com« .
Beaucoup de travail a d’ores et déjà été fait par la core team de CakePHP sur cette version expérimentale du framework. Le code est donc déjà utilisable pour tester et voir ce qui sera peut-être le futur du framework. Je n’ai pas encore eu le temps de tester Cake3, et ce qui suit a été rédigé depuis mes notes et ma mémoire … aussi n’hésitez pas à me faire part d’oublis ou d’incohérences dans les commentaires). Les principales nouveautés présentées dans la suite de l’intervention sont les suivantes :
- Compatibilité minimum : PHP5.3 … celà semble logique, mais mieux vaut le repréciser !
- Utilisation des espaces de noms et réorganisation des fichiers du coeur pour que la structure de fichiers corresponde aux espaces de nom
- Utilisation des fermetures à divers endroits pour faciliter l’intéraction avec le coeur (nouveauté du langage PHP5.3 permettant d’avoir une approche de programmation fonctionnelle)
- Couplage faible des classes entre elles, afin de permettre une plus grande modularité
- Hiérarchie de dépendances et surcharges permettant notamment de surcharger le comportement du coeur au sein d’un plugin, ou de l’application
- Lazy loading : les librairies sont chargées dynamiquement au moment de leur utilisation, et les requêtes à la base de données ne sont effectuées que lorsque nécessaire
- Système de filtres permettant de faciliter l’intégration d’un module au sein du workflow de l’application (la logique n’est plus séparée entre « beforeFilter » et « afterFilter » !)
- Utilisation systématique de la syntaxe « objet » ($resultat->attribut au lieu de $resultat['Resultat']['attribut']) pour les résultats de recherche (find()) par exemple. Finis les tableaux à gogos … mais possibilité de les retrouver en un appel à une méthode de conversion pour les plus nostalgiques !
- Résultats de recherche retournés sous forme de collection d’objets de la librairie SPL pour de meilleures performances
- Clés primaires composées : longtemps rejetées par la core team (prônant les id uniques), les clés primaires composées seront désormais supportées pour les modèles
- L’attribut « $displayField » d’un modèle pourra également être composé de plusieurs champs … bien pratique aussi !
- Changement de licence : MIT vers BSD pour encore plus de liberté !
Quelques conséquences très intéressantes de cette ré-écriture et de l’utilisation de PHP5.3 avec une approche aussi modulaire :
- Il est possible d’utiliser les fonctions du coeur de Cake3 dans n’importe quelle autre application (PHP classique, Symfony, ZF …) en incluant un seul fichier !
- Nate Abele représente CakePHP au sein d’un groupe formé au sein de la communauté PHP visant à s’entendre sur des standards de développement. Le but de ce groupe est de permettre une réutilisation de code entre les différents frameworks et solutions PHP. Un plugin développé pour Cake3 serait donc utilisable sans aucune modification au sein du Zend Framework (et vice-versa). Note : pour le moment aucune preuve de concept n’a encore été faite !
- Les performances ont fait un bond ! Il est normal qu’en réutilisant les dernières nouveautés apportées par le langage PHP, le code nécessaire pour une même fonctionnalité soit moindre et que les performances s’en ressentent … le fameux test du « Hello World » avec un passage complet dans le workflow de Cake3 (et requête SQL il me semble) est ainsi à peine 1.6x plus long qu’un simple « echo ‘Hello world!’; ». C’est un test qui vaut ce qui vaut, mais il fallait le mentionner.
Voici donc ce qui pourrait être le futur du framework. Il reste encore beaucoup de travail à réaliser pour que celui-ci atteigne une API stable puis un code sans bug, mais c’est là un changement radical dans l’histoire de CakePHP car il ne sera plus question de rétro-compatibilité PHP4 et API. En attendant, pour vos développements n’oubliez pas que la branche 1.x du framework devrait apporter son lot d’améliorations avec la version 1.3 (sans doute la dernière de la branche, et donc du support PHP4) … et que la version 2.0 (full PHP5) de CakePHP avance à grands pas. Pour ma part, j’espère avoir l’occasion de revenir plus en détails sur cette version expérimentale du framework après avoir fait de plus amples essais, mais en attendant je vous invite à aller vous plonger dans le code à votre disposition sur http://code.cakephp.org/cake3
Pingback: CakePHP n’est pas mort !