Faut-il passer à Zend Framework 2 ?

#framework#php#zend

La réponse à la problématique que nous nous posons, à savoir « Faut-il passer à Zend Framework 2 ? » pourrait être évidente : Zend Framework 1 ne sera plus supporté fin 2013 (ou début 2014 selon que l’on voie le verre à moitié vide ou à moitié plein). Mais avant toute chose, pourquoi une nouvelle version majeure ? La raison principale tient au fait que Zend Framework 1 n’évolue plus. Sa dernière version, la 1.12, ne corrige que quelques bugs mineurs. Zend Framework 1.12 étant devenue extrêmement stable, c’est l’occasion de développer une nouvelle version diront les mêmes optimistes voyant ce fameux verre à moitié plein. Cela ne fait aucun doute.

Développer une nouvelle version a certainement une deuxième raison propre à beaucoup de projets informatiques. À force d’ajouter des fonctionnalités permettant d’enrichir le produit, sa clarté s’est doucement mais sûrement détériorée, à tel point qu’ouvrir le capot de cette technologie bricolée fasse frémir les plus volontaires. Zend Framework était sans doute arrivé au point où il fallait choisir entre ajouter des rustines à chaque amélioration désirée (et sans doute mourir à petit feu) et revoir ses bases en profondeur afin d’être à la pointe des dernières technologies, comme lors des tous premiers jours. En particulier, Zend Framework 2 intègre pleinement les nouveautés de PHP 5.3 contrairement à la 1.11 qui n’en exploitait pas tout le potentiel. Zend Framework 2 est par ailleurs compatible avec PHP 5.4.

Zend a donc fait ce choix de refonte, lourd de conséquences, avec notamment la perte de compatibilité ascendante avec la version précédente.

Le principal contributeur de Zend Framework 2, Matthew Weier O’Phinney (presque un tiers des commits lui sont dus), annonce la couleur : « L’objectif premier de Zend Framework 2.0 est de faire un produit plus cohérent, bien documenté, permettant l’amélioration de la productivité des développeurs et des performances ». Avec ses 13 000 commits pour environ 600 contributeurs, découvrons donc le dernier protégé de la société fondée par les créateurs de PHP 3, ce dernier ayant alors révolutionné le monde PHP.

Quelques atouts de la nouvelle version

Finie la magie

En PHP, les méthodes magiques sont ces méthodes commençant par « __ » qui sont lancées alors qu’aucun appel explicite ne leur est fait.

Par exemple :

Ceci appelle la méthode __set() dans laquelle on peut avoir mis ce que l’on veut. Ces pratiques font parfois gagner du temps. Mais cela complique énormément la compréhension et les corrections. Zend a considéré qu’utiliser des méthodes magiques était une mauvaise pratique, et en a drastiquement limité leur utilisation dans son Framework.

L’autoloading

L’auto-chargement des classes est la fonctionnalité de PHP 5 qui permet de charger une classe sans que le développeur ait besoin d’écrire une longue liste de required_once() définissant les classes dont dépend la classe courante. Cette astuce était déjà utilisée dans la première version de Zend Framework, grâce à sa classe Zend_Loader_Autoloader. Mais cette fois, Zend Framework 2 intègre entièrement cette nouveauté et rend son utilisation systématique. De plus, l’autoloader est construit de manière à respecter la norme PSR-0, la dernière en vigueur. Ainsi, les espaces de nom (ou namespaces) ne sont plus séparés par des « _ » mais par des DIRECTORY_SEPARATOR (des « / »). Par exemple, le code ci-dessous représente le début du fichier du contrôleur du module application :

Nouvelle gestion des modules

L’architecture de Zend Framework 2 est très similaire à celle de Zend Framework 1 (organisation MVC : Modèle – Vue – Contrôleur). Mais elle a évolué de façon à permettre la réutilisation d’un module moyennant quelques configurations toutes regroupées dans le dossier « config ».

Ceci permet de récupérer des modules supportés par la communauté Zend Framework afin de ne pas réinventer la roue, principal intérêt d’un framework, tout en étant pleinement dans l’esprit de Zend Framework 1. Par rapport aux autres frameworks, celui de Zend est construit comme un ensemble de composants (briques) que le développeur utilise à sa guise

Figure 1 : architecture du squelette d'une application Zend Framework 2

Figure 1 : architecture du squelette d’une application Zend Framework 2

D’autres nouveautés sont moins spectaculaires mais bien présentes :

  • Les suffixes « interfaces » ont été retirés
  • Les méthodes et attributs privés ne possèdent plus de « _ » les précédant.
  • Les dépendances codées en dur ont été supprimées
  • Plusieurs parties du framework, dont on s’est aperçu qu’elle étaient mal pensées lors des remontées de Zend Framework 1, ont été retravaillées.

Principales critiques négatives

Le reproche le plus récurrent fait à Zend Framework 2 concerne sa complexité. Les blogueurs sont nombreux à crier leur désarroi face à cette « inutile » complexité, alors que la simplicité était le principal argument de « vente » de Zend Framework 1 (et de PHP).

Par exemple, le « getting started » de la documentation officielle (documentation bien fournie, pour le moment uniquement en anglais), pourtant une des priorités de Zend Framework 2, fait peur à voir. Tout ce code (45 pages de tutoriel tout de même) pour si peu ? C’est ce que beaucoup d’adeptes de ce framework décrient. Après avoir suivi ce tutoriel, on ne peut qu’espérer que cette complexité disparaisse à l’usage et qu’elle constitue un réel gain de temps pour la suite, notamment pour les réalisations de grande envergure.

Cette apparente complexification s’explique entre autres par le choix des contributeurs de réduire les traitements masqués (la magie, ou la complexité cachée évoquée plus haut). À tout avantage ses défauts…

La seconde critique négative, émanant elle-aussi des blogueurs anglo-saxons, fustige l’incroyable succession des versions bêtas qui sont sorties (peut-être un peu pour alimenter le buzz), avec entre elles des différences si importantes que le code écrit sous l’une de ces versions devait être entièrement retravaillé pour être fonctionnel sous une version bêta postérieure. Un logiciel en version bêta est pourtant censé connaître une certaine stabilité.

Un point qui se révèle à la fois positif et négatif : l’autoloader étant devenu systématique, il est désormais impossible d’utiliser une des briques de Zend Framework 2 sans passer par lui. Ceci met un terme aux briques totalement indépendantes qui apparentaient Zend Framework à une librairie plus qu’à un véritable framework.

Dernière critique mais pas des moindres : une application codée sous Zend Framework 1 est incompatible avec Zend Framework 2. Zend propose bien des outils permettant d’automatiser le passage vers sa nouvelle version, mais cette migration automatisée ne recouvre qu’une partie des développements.

Ces critiques toutes venues de courageux pionniers se lançant, pleins de bonne volonté, dans la nouvelle technologie de Zend, sont toutefois à modérer. On trouve en effet beaucoup de ces développeurs certainement expérimentés et de bonne foi, criant à qui mieux mieux qu’ils n’utiliseront pas cette technologie qui a perdu l’esprit qu’elle avait à ses débuts. Mais quand on a la curiosité d’aller chercher les critiques des développeurs découvrant Zend Framework 1, en 2005, on est étonné de la virulence et de la similarité des arguments critiquant cette première release (complexité, documentation inextricable, « quick start » inexistant, influence de Java…). Oui, malgré une extrême simplicité souvent vantée, on échappe rarement à une période d’apprentissage.

Conclusion

On l’aura bien compris, comme le répètent les auteurs de Zend Framework 2, en particulier Rob Allen (contributeur et auteur du livre « ZEND Framework in Action »), il est indispensable de penser « évolution » plutôt que « révolution », et donc d’accepter un petit investissement afin de profiter du patient mais inéluctable progrès des technologies.
Bien que l’avalanche de nouveaux Frameworks PHP sortant ces dernières années nous incite à la méfiance, il faut regarder les indicateurs nous permettant de se lancer avec confiance :

  • L’importance de la communauté soutenant la technologie. Les développeurs contribuant à cette dernière utilisent GitHub (outil de gestion de versions décentralisé contrairement au célèbre SVN), le dernier chouchou de l’open source, qui met d’ailleurs à disposition une série de statistiques très intéressantes sur la fréquence des commits, l’importance des contributeurs…
  • La confiance que l’on peut mettre dans la société Zend qui a déjà fait ses preuves

Il est possible de retrouver un extrait de cet article dans le numéro 162 du mois d’Avril 2013 du magazine « Programmez ».