SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
CAHIER TECHNO
FRAMEWORK PHP
Un test « en temps réel » sur un
cas d’école
  	
   	
   	
   	
   	
   	
   	
   	
   2	
  /	
  18	
  
Introduction
Qu’y a-t-il dans ce cahier techno ?
Nous proposons une approche plutôt pragmatique pour présenter les
principaux frameworks PHP. Nous nous sommes dit que les principaux
critères de choix d’un framework étaient d’en comprendre facilement le
fonctionnement, réussir à le prendre en main rapidement et avoir accès à
une documentation complète. Fort de ce constat, nous avons choisi de tester
(en essayant d’être le plus objectif possible) la mise en œuvre d’un cas
d’école.
En bref, ce cahier a pour but de dépasser la discussion d’experts qui ont la
fâcheuse tendance à finir par préconiser ce qu’ils connaissent !
La première partie fait une rapide synthèse des raisons qui poussent à
utiliser un framework de manière générale et dans la deuxième partie, David
Négrier, notre CTO réalise et commente en « temps réel » le développement
de ce test.
A qui s’adresse ce livre blanc ?
Evidemment, ce cahier s’adresse à ceux qui vont lancer les travaux de
développement de leur projet web. Il vous permettra d’avoir un éclairage
objectif des différents aspects de ces frameworks afin que vous fassiez le
choix le plus approprié à votre projet et votre équipe.
Toute l’équipe de TheCodingMachine se tient également à votre
disposition pour discuter du sujet, concevoir et implémenter vos
nouveaux projets !
  	
   	
   	
   	
   	
   	
   	
   	
   3	
  /	
  18	
  
D’abord, pourquoi utiliser un
framework ?
Définition et intérêt d’un framework de
développement
Un framework fournit aux développeurs un cadre de travail (un framework
quoi ;-)) qui guide l’architecture de développement en conduisant les
développeurs à respecter certaines normes. Les frameworks sont conçus
pour augmenter la productivité des développements et assurer le respect
des bonnes pratiques facilitant ainsi la maintenance et les évolutions d’une
application.
Le choix d’un framework s’impose dans la majorité des projets PHP car, au-
delà du gain en productivité, il permet d’industrialiser les travaux de
développement et de garantir la qualité du code.
  	
   	
   	
   	
   	
   	
   	
   	
   4	
  /	
  18	
  
Principaux composants d’un framework
La grande majorité des frameworks reprennent les éléments suivants :
  	
   	
   	
   	
   	
   	
   	
   	
   5	
  /	
  18	
  
Quels sont les frameworks que
nous avons testés ?
PHP étant un langage accessible et très apprécié des développeurs web, il
existe une multitude de framework.
(cf : http://fr.wikipedia.org/wiki/Liste_de_frameworks_PHP).
Quelques-uns se détachent par leurs fortes utilisations (ce sont tous des
frameworks MVC) :
-­‐ Symfony 2 : Un des grands framework, il est assez complexe mais
intéressant pour les grands projets. Il convient de préciser qu’il est
supporté par une équipe française et par conséquent très utilisé en
France ;
-­‐ Zend Framework 2 : Les créateurs de Zend font partie des
développeurs pionniers dans la conception de PHP (rien que ça !).
Leur framework, comparable à Symfony 2, est une référence
mondiale ;
-­‐ Silex : Les concepteurs de Symfony ont créé un framework
minimaliste adapté pour les projets de taille raisonnable ;
-­‐ Code Igniter : Framework ultra léger (quelques heures suffisent pour
apprendre à l’utiliser). Il souffre des défauts de ses qualités, c’est-à-
dire qu’il peut être un peu trop simple sur certains projets.
Il en existe bien évidemment pleins d’autres très utilisés. Citons Laravel, Yii,
CakePHP… Nous n’avons hélas pas eu le temps de tous les analyser, et cela
ne signifie pas qu’ils sont sans intérêt.
Le cas d’école
Nous avons comparé les fonctionnalités des quatre frameworks sélectionnés
afin de vous fournir une analyse fine au travers d’un cas concret. Pour ce
faire, nous avons effectué un test en situation. Ce test a consisté à
chronométrer le temps nécessaire pour réaliser une application de carnet
d’adresse, avec les fonctionnalités suivantes :
-­‐ Liste des adresses paginée, ordonnable par colonnes ;
-­‐ Formulaire de création / modification d’adresse.
  	
   	
   	
   	
   	
   	
   	
   	
   6	
  /	
  18	
  
Un mot à propos du testeur
Le test a été effectué par David Négrier, notre CTO dans le cadre d’une
mission d’audit pour l’un de nos clients. David est le lead developper de Mouf,
notre framework d’injection de dépendance.
Etant lui-même auteur d’un framework, il n’a aucune raison de favoriser un
framework plutôt qu’un autre… à part Mouf bien sûr mais nous ne le
testerons pas, nous ne serions pas objectifs.
David dispose d’une forte maitrise du PHP et de tous les designs patterns
associés aux frameworks ainsi que de toutes les bonnes pratiques de
développement.
À travers ce test, il a essayé, en toute transparence, de respecter toutes les
bonnes pratiques de développement, notamment concernant l’injection de
dépendance.
  	
   	
   	
   	
   	
   	
   	
   	
   7	
  /	
  18	
  
Symfony 2
Présentation
L’un des 2 mastodontes du monde PHP (l’autre étant Zend Framework 2).
Symfony 2 est extrêmement complet. Il s’appuie pour certaines briques sur
des librairies externes de qualité (par exemple, l’ORM est géré par Doctrine 2,
qui est un projet externe aussi utilisé en option par Zend Framework).
Les composants constituant Symfony 2 sont faiblement couplés et peuvent
pour la plupart être utilisés de manière unitaire (voir Silex à ce sujet). Ils sont
tous d’excellente qualité et bien documentés (avec une traduction française
disponible).
Le « liant » entre les composants est effectué par la notion de « Bundle » et
par injection de dépendance. Un bundle est un ensemble de fonctionnalités
verticales qui peut être réutilisé. Un bundle peut donc contenir un ou
plusieurs contrôleurs, des vues, des entités (objets stockés en base de
données), des services, etc.
Cette notion de bundle est légèrement redondante avec la notion de package
de Composer (Symfony2 a été développé avant Composer), ce qui peut
rajouter de la complexité. De même, la notion de bundle posera souvent des
questions que le développeur ne se poserait pas autrement : combien de
bundle ? Quelle fonctionnalité mettre dans quel bundle ?
Le gros avantage des bundles est de pouvoir être redistribués. Le site
http://knpbundles.com référence ainsi 1900 bundles, allant du template
Bootstrap au mécanisme de gestion d’utilisateurs standardisé.
Développement de l’application test
0 mn L’installation se fait par Composer.
Une fois l’installation effectuée, une page effectue une vérification
de ma configuration de PHP. Elle m’informe que ma version de
APC n’est pas suffisante. Je mets donc à jour APC.
  	
   	
   	
   	
   	
   	
   	
   	
   8	
  /	
  18	
  
9 mn Je créé un premier bundle en utilisant l’outil en ligne de
commande qui m’aide à le mettre en place, puis un contrôleur en
suivant le tutoriel. L’utilisation des annotations est élégante et
agréable à utiliser. Le référencement du contrôleur dans la
configuration n’est pas trivial mais bien documenté (22 minutes)
31 mn Je cherche à disposer d’un template Bootstrap. Je recherche un
bundle, en choisit un à jour (d’autres ne fonctionnent qu’avec la
version beta) et l’installe. Le bundle requiert « Assetic », un autre
bundle extrêmement puissant qui se charge de la gestion des
fichiers JS et CSS (et de la compilation des fichiers LESS en CSS).
Puissant mais complexe à utiliser. Je finis par réussir à compiler
les fichiers LESS et obtenir mon template en 47 minutes.
1h18 Je passe à la partie base de données. J’utilise Doctrine 2 pour
créer un objet qui va générer la table. Cette approche peut
s’avérer problématique lorsque le modèle de données est fourni
et qu’il faut s’y adapter. L’utilisation de Doctrine est néanmoins
très facile. Il me faut moins de 15 minutes pour mettre en place
la table, et un mécanisme de sauvegarde. Je développe
également un formulaire d’ajout / édition en utilisant Symfony
Forms. Le mécanisme est élégant et s’intègre bien avec Doctrine,
même s’il posera très certainement de fortes limitations pour les
formulaires avancés.
1 h 33 Je télécharge un bundle permettant d’afficher les listes avec une
pagination. Il existe de nombreux bundle permettant de le faire.
L’installation de bundle est toujours un peu complexe, et pas
toujours bien documentée suivant le bundle, mais il est facile de
trouver des réponses sur internet. Le composant de pagination
s’intègre avec Doctrine. 42 minutes
2 h 15 A ce stade, j’ai un carnet d’adresse fonctionnel. Cependant, je suis
assez surpris par les différents tutoriels. Ils m’encouragent à
accéder aux différents composants depuis le contrôleur par leur
nom (ServiceLocator pattern). Par exemple, dans le contrôleur,
on m’encourage à accéder à un service avec cette ligne de code
pour accéder à Doctrine :
$em = $this->get('doctrine.orm.entity_manager');
Cette approche est un « anti-pattern ». Voir à ce sujet cet article :
http://blog.astrumfutura.com/tag/service-locator/
  	
   	
   	
   	
   	
   	
   	
   	
   9	
  /	
  18	
  
Au contraire, le framework devrait être capable d’injecter toutes
les dépendances dans le contrôleur avant que je ne l’utilise. Je
devrais directement pouvoir utiliser « $this->em » pour acceder à
l’objet doctrine sans me soucier de donner son nom.
Je me rends alors compte que je dois faire une manipulation
pour transformer mon contrôleur en service qui peut être injecté.
Cette manipulation est mal expliquée dans la documentation et
assez contre-intuitive (alors qu’elle devrait faire partie des étapes
logiques de création d’un contrôleur). Je finis par réussir à tout
configurer. Temps passé : 53 minutes.
3h08
Je dispose d’une application complète
Ressenti : Le cœur de Symfony est bien documenté. Utiliser Doctrine est très
rapide et vraiment efficace. L'installation de bundles tiers (Bootstrap qui nécessite
Assetic) montre la puissance, mais aussi la complexité de Symfony. L'installation
d'un bundle est un peu fastidieuse. Je suis surpris de la configuration de l’injection
de dépendance (anti-pattern Service Locator utilisé à la place) qui n’est pas
encouragée, et qui est vraiment fastidieuse (fichier XML ou Yaml contre-intuitif).
  	
   	
   	
   	
   	
   	
   	
   	
   10	
  /	
  18	
  
Zend Framework 2
Présentation
Sorti 1 an après Symfony 2, Zend Framework 2 est très semblable à ce
dernier. Il est aussi séparé en briques qui peuvent être utilisées unitairement.
Le « liant » entre les composants est effectué par la notion de « Module » (le
pendant exact du bundle Symfony 2) et par injection de dépendance. Un
module est un ensemble de fonctionnalités verticales qui peut être réutilisé.
Un module peut donc contenir un ou plusieurs contrôleurs, des vues, des
entités (objets stockés en base de données), des services, etc…
Tout comme pour Symfony, cette notion de module est légèrement
redondante avec la notion de package de Composer, ce qui peut rajouter de
la complexité. De même, la notion de module posera souvent des questions
que le développeur ne se poserait pas autrement : Combien de modules ?
Quelle fonctionnalité mettre dans quel module ?
Le site http://modules.zendframework.com/ référence 470 modules
existants.
Note : contrairement au site dédié aux modules Symfony, il ne met pas en avant
les modules phare de ZF2.
Développement de l’application test
0 mn L’installation se fait par Composer.
Le premier contact avec le tutoriel / la documentation de Zend
Framework est rude. Le tutorial commence par la mise en place
de tests unitaires (avant même une première page). S’il s’agit
d’une bonne pratique, elle est dure à suivre et le tutorial
l’explique mal. De plus, ce n’est pas particulièrement engageant
pour un apprentissage :
http://framework.zend.com/manual/2.0/en/user-guide/unit-
testing.html
Je saute cette étape.
  	
   	
   	
   	
   	
   	
   	
   	
   11	
  /	
  18	
  
La documentation explique comment créer un module à la main
(là où Symfony propose un outil en ligne de commande pour le
faire). Pour cela, elle propose de créer 13 (!) répertoires, ainsi que
de copier-coller 3 fichiers de configuration cryptiques.
Elle ne fait pas référence à l’outil Zend_Tools qui permet de créer
son module en ligne de commande facilement. Je trouve et
installe Zend_Tools et créé mon module sans suivre la
documentation (le processus est bien trop complexe à la main).
J’utilise Zend_Tools. Temps écoulé : 9 minutes
9 mn Je débute la mise en place du contrôleur. Le framework
Bootstrap est inclus dans le package de base de Zend
Framework, donc contrairement à Symfony, je n’ai pas à l’installer.
La création du contrôleur est rapide. Le mécanisme de
configuration des routes est par contre bien moins intuitif que
celui de Symfony (pas d’annotations, configuration à la main dans
un fichier difficile à comprendre). Temps : 19 minutes
28 mn Je passe à la mise en place de la base de données. Bien que Zend
Framework 2 puisse s’intégrer avec Doctrine, le tutorial conseille
d’utiliser le mécanisme natif ZF2 : le TableGateway. Son utilisation
est catastrophique. Nécessite un énorme nombre de ligne de
codes /classes pour arriver à faire ce que Doctrine fait en
quelques lignes. A éviter absolument. Temps : 24 minutes
52 mn Je cherche à afficher une première vue. Le tutorial propose
d’utiliser des fichiers PHP pour la gestion du template. Cela place
la responsabilité de la sécurité sur le développeur (il ne doit pas
oublier de protéger toutes les données entrées par l’utilisateur
pour se prémunir des attaques XSS). L’approche Symfony (qui
utilise Twig) me paraît meilleure. Réussir à faire fonctionner une
vue est complexe (cela nécessite d’éditer un bon nombre de
fichiers de configuration). Je fini par mettre en place la liste des
adresses, sans pagination. Temps écoulé : 27 minutes
1 h 19 Je mets en place le formulaire de création/modification d’adresse.
L’étape est simple mais assez verbeuse. Je n’arrive pas à mettre
en place un widget pour la sélection de la date.
Note : l’absence d’annotations comme dans Symfony se fait
cruellement ressentir. Les contrôleurs sont moins propres, on ne
voit pas les paramètres passés.
  	
   	
   	
   	
   	
   	
   	
   	
   12	
  /	
  18	
  
Temps écoulé : 5 minutes
1 h 24 Je tente de mettre en place la pagination. Je trouve plusieurs
tutoriaux, mais ils ne sont pas à jour (basés sur une version beta
du Zend Framework). Ils ne fonctionnent pas. Je tente de faire le
mécanisme de pagination à la main. Je n’y arrive pas, la route ne
prend pas en compte mes paramètres, j’ai une erreur et rien
dans les logs. Impossible de trouver de l’aide à ce sujet. Temps
écoulé (sans résultat probant) : 39 minutes
2 h 03 Tout comme pour Symfony, je suis surpris. Le tutorial
m’encourage à accéder aux différents composants depuis le
contrôleur par leur nom (ServiceLocator pattern). Je souhaite que
les services soient injectés directement dans le contrôleur. Ceci
est possible. Après plusieurs recherches sur internet qui
m’amènent sur de mauvaises pistes, je trouve la solution sur le
blog de Marco Pivetta : http://ocramius.github.io/blog/zend-
framework-2-controllers-and-dependency-injection-with-zend-di/
Le gestionnaire d’injection de dépendance de ZF2 semble être
plus facile à utiliser que celui de Symfony2. On peut injecter les
dépendances en utilisant des closures, ce qui est beaucoup plus
facile que la configuration XML. Le système ressemble à Pimple
(voir Silex plus bas). Temps écoulé : 54 minutes
2 h 57
Je dispose d’une application incomplète sans
widget pour l’affichage des dates et sans
pagination.
Ressenti : Zend Framework 2 et Symfony 2 se ressemblent beaucoup.
Cependant, là où Symfony fait beaucoup pour l’utilisateur (configuration par les
annotations, etc.), Zend Framework est plus dur d’accès. Surtout, la
documentation est vraiment moins aisée à suivre que celle de Symfony. Le
framework en devient cryptique par moment et très peu engageant. Toutes les
modifications sont complexes à gérer et on ressent réellement la lourdeur du
framework et un manque d’agilité.
Alors que Zend Framework 2 propose des fonctionnalités similaires à Symfony 2
(ligne de commande Zend Tools, ORM Doctrine2, etc…), le tutorial n’accompagne
pas le développeur dans l’utilisation de ces outils.
  	
   	
   	
   	
   	
   	
   	
   	
   13	
  /	
  18	
  
Silex
Présentation
Silex est un « micro-framework ». Basé sur les composants de Symfony 2, il
permet de réutiliser facilement les templates Twig, la génération de
formulaire de Symfony etc., mais sans la complexité liée aux gros frameworks
(pas de bundle ou de modules).
Il dispose d’un mécanisme simple (voir simpliste) d’injection de dépendance :
Pimple.
Il n’y a pas de nombreux fichiers de configuration. Toute la configuration de
l’application (injection de dépendance et routes) se situe dans le fichier
index.php. L’approche de Silex ressemble à Sinatra (Ruby) ou à Express.js
(NodeJS) dans la syntaxe de définition des routes.
Ne disposant pas de mécanisme d’ORM propre, j’ai rajouté Doctrine dans le
projet Pimple pour gérer les accès à la base.
Développement de l’application test
0 mn L’installation se fait par Composer.
Le template doit être créé à la main. Je télécharge Bootstrap,
jQuery, je créé le template Bootstrap.
Je configure mon premier contrôleur. Tout comme Symfony et
Zend Framework, Silex n’encourage pas la création d’un
contrôleur utilisant l’injection de dépendance. La configuration de
celui-ci pour supporter l’injection de dépendance est par contre
triviale (contrairement à Symfony et ZF2), grâce à Pimple, un
mécanisme simple et bien pensé.
48 mn Mon template est en place, je débute l’installation de Doctrine.
L’installation manuelle est plus complexe que l’installation via
Symfony 2 (2 fichiers de configuration à créer). Rien
d’insurmontable cependant. Temps écoulé : 36 minutes
1 h 24 Contrairement aux 2 autres tests sous Symfony et ZF, je décide
d’utiliser une grille Ajax. La grille que je choisi est mal documenté
  	
   	
   	
   	
   	
   	
   	
   	
   14	
  /	
  18	
  
ce qui me fera perdre du temps. J’utilise le mécanisme de
génération de formulaires de Symfony 2 (ce qui me permet de
réutiliser quasiment ligne pour ligne le code développé dans le
projet Symfony 2). Temps écoulé : 99 minutes.
3 h 03 Je fais une passe de « proprification », rajout de liens dans la
grille… Temps écoulé : 11 minutes
3 h 14
Je dispose d’une application propre
Ressenti : Silex est réellement agréable à utiliser. On n’est pas perdu dans les
différents fichiers de configuration, et on arrive très vite à une solution très propre.
Les contrôleurs sont des classes PHP simples sans aucune dépendance sur le
framework (découplage maximal).
  	
   	
   	
   	
   	
   	
   	
   	
   15	
  /	
  18	
  
Code Igniter
Les points mis en avant pour ce framework par les développeurs sont :
-­‐ Un framework de petite taille ;
-­‐ De très bonnes performances ;
-­‐ Simple.
Si ce framework connait un certain succès, il dispose hélas de défauts
rédhibitoires :
-­‐ Repose sur une convention de nommage incompatible
avec la norme PSR-0 ;
-­‐ Pas de paquet Composer disponible ;
-­‐ Pas de moteur d’injection de dépendance ;
-­‐ Pas de moteur de template par défaut (on peut en
rajouter un cependant).
Le carnet d’adresse n’a pas été réalisé pour ce framework, qui est très loin
des standards du moment.
  	
   	
   	
   	
   	
   	
   	
   	
   16	
  /	
  18	
  
Un petit bonus avec Mouf
Nous n’avons pas fait le test concernant le framework Mouf car nous avons
considéré que nous ne pouvions pas être juge et partie, normal on ne renie
pas ses enfants ! Sachez simplement que Mouf aurait remporté cet exercice
haut la main. C’est le meilleur et le plus beau !
Néanmoins, je ne peux pas m’empêcher de vous ajouter une petite
présentation à son sujet.
Présentation
Mouf est un framework PHP d’injection de dépendances avec une interface
de développement web ergonomique pour les développeurs. L’intérêt de
Mouf est de permettre aux développeurs de réutiliser des composants qu’ils
ont développés ou qui ont été développés par d’autres. Mouf agrège des
bibliothèques de composants et vous aide à les lier ensemble. Mouf est en
même temps un framework d’injection de dépendance pour la partie
graphique et un framework de développement Web complet avec des
centaines de paquets disponibles.
De plus, Mouf peut être utilisé en complément d’autres frameworks et
s’intégrer dans des environnements tels que Zend, Symfony 2, Drupal,
WordPress, etc.
N’hésitez pas à visiter le site web : http://mouf-php.com
  	
   	
   	
   	
   	
   	
   	
   	
   17	
  /	
  18	
  
Conclusion
L’utilisation d’un framework est aujourd’hui une norme pour les projets
professionnels, il vous garantit d’avoir un code maintenable et évolutif. Le
choix du bon framework doit répondre aux critères de votre projet (taille du
projet, compétence de l’équipe, fonctionnalités souhaitées etc.).
Pour les très grosses applications, Symfony 2 semble prendre l’avantage. Une
bonne documentation associée à la présence de nombreux bundles sont les
principaux atouts de ce framework. Certains bundles phares, comme Sonata
qui permet de gérer les interfaces d’administration facilement, peuvent
accélérer considérablement le développement.
Cependant, la tendance actuelle est clairement à la séparation en
composants plus petits et plus maniables. Ainsi, Silex, présenté comme un
micro-framework pour les petites applications, peut en fait être utilisé pour
bien plus, à condition de s’en servir comme routeur, avec les bonnes librairies
en support (Doctrine et Twig principalement).
Ainsi, il n’est plus rare de développer des applications en utilisant des
composants unitaires d’un framework ou d’un autre. Afin de faciliter
l’interopérabilité des différents composants des frameworks entre eux, un
groupe de travail - le PHP Framework Interoperability Group (ou PHP-FIG) -
s’est formé pour favoriser la création d’interfaces communes. Dans le futur, il
est donc probable qu’on opposera moins des frameworks monolithiques,
mais qu’au contraire, on les fera travailler ensemble, chacun sur leur point
fort.
  	
   	
   	
   	
   	
   	
   	
   	
   18	
  /	
  18	
  
	
  
	
  
	
  
	
  
	
  
	
  
A propos de
TheCodingMachine
TheCodingMachine accompagne ses clients sur des missions de conseil
technologique et sur des projets de développement d'applications Web.
Nous sommes spécialisés dans le développement de sites Internet,
d’intranets, d’applications Web métiers en PHP et en JavaScript.
Fondée, en 2005, par trois anciens consultants technology d’Accenture,
TheCodingMachine a piloté plus de 200 projets. Nous travaillons aussi bien
pour des grands comptes privés et publics, pour des PME-PMI que pour des
startups. Nous avons investis dès notre création dans la R&D, ce qui nous
permet par exemple d’être à la pointe des technologies temps réel (Node.JS,
Backbone.JS, AngularJS, streaming video, chat etc.).
Besoin d’assistance pour votre projet web ? D’un
expert technique ? N’hésitez pas à nous solliciter !
contact@thecodingmachine.com
01 71 18 39 73

Contenu connexe

Tendances

Introduction aux méthodes agiles
Introduction aux méthodes agilesIntroduction aux méthodes agiles
Introduction aux méthodes agilesGuillaume Collic
 
Partie 1 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
Partie 1 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...Partie 1 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
Partie 1 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...Bruno Flaven
 
Formation agile - Certification Professional Scrum Product Owner
Formation agile - Certification Professional Scrum Product OwnerFormation agile - Certification Professional Scrum Product Owner
Formation agile - Certification Professional Scrum Product OwnerNovUp
 
Partie 2 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
Partie 2 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...Partie 2 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
Partie 2 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...Bruno Flaven
 
Les méthodes Agiles - Introduction
Les méthodes Agiles - IntroductionLes méthodes Agiles - Introduction
Les méthodes Agiles - IntroductionTremeur Balbous
 
Méthodes agiles: Scrum et XP
Méthodes agiles: Scrum et XPMéthodes agiles: Scrum et XP
Méthodes agiles: Scrum et XPYouness Boukouchi
 
Gestion de projets agiles avec scrum actiskills
Gestion de projets agiles avec scrum actiskillsGestion de projets agiles avec scrum actiskills
Gestion de projets agiles avec scrum actiskillsPierre E. NEIS
 
Méthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiquesMéthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiquesSirine Barguaoui
 
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPMethodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPNicolas Perriault
 
Présentation des principes Scrum
Présentation des principes ScrumPrésentation des principes Scrum
Présentation des principes Scrummsmpp-nantes
 
Impacts de l'adoption de Scrum
Impacts de l'adoption de ScrumImpacts de l'adoption de Scrum
Impacts de l'adoption de ScrumPyxis Technologies
 
Du Manifeste Agile à Scrum
Du Manifeste Agile à ScrumDu Manifeste Agile à Scrum
Du Manifeste Agile à ScrumXavier Warzee
 
Expression des besoins pour le SI
Expression des besoins pour le SIExpression des besoins pour le SI
Expression des besoins pour le SINouhaila ALAMI
 

Tendances (20)

Scrum
ScrumScrum
Scrum
 
Introduction aux méthodes agiles
Introduction aux méthodes agilesIntroduction aux méthodes agiles
Introduction aux méthodes agiles
 
Partie 1 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
Partie 1 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...Partie 1 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
Partie 1 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
 
Formation agile - Certification Professional Scrum Product Owner
Formation agile - Certification Professional Scrum Product OwnerFormation agile - Certification Professional Scrum Product Owner
Formation agile - Certification Professional Scrum Product Owner
 
Les pratiques Scrum
Les pratiques ScrumLes pratiques Scrum
Les pratiques Scrum
 
Partie 2 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
Partie 2 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...Partie 2 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
Partie 2 - Agile, Scrum, Méthodologie – Un tour d’horizon rapide sur la métho...
 
Les méthodes Agiles - Introduction
Les méthodes Agiles - IntroductionLes méthodes Agiles - Introduction
Les méthodes Agiles - Introduction
 
Méthodes agiles: Scrum et XP
Méthodes agiles: Scrum et XPMéthodes agiles: Scrum et XP
Méthodes agiles: Scrum et XP
 
Methodes agile
Methodes agileMethodes agile
Methodes agile
 
Gestion de projets agiles avec scrum actiskills
Gestion de projets agiles avec scrum actiskillsGestion de projets agiles avec scrum actiskills
Gestion de projets agiles avec scrum actiskills
 
Méthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiquesMéthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiques
 
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPMethodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
 
Methodes agiles
Methodes agilesMethodes agiles
Methodes agiles
 
12 agile
12 agile12 agile
12 agile
 
Agile presentation
Agile presentationAgile presentation
Agile presentation
 
Méthodes agiles
Méthodes agilesMéthodes agiles
Méthodes agiles
 
Présentation des principes Scrum
Présentation des principes ScrumPrésentation des principes Scrum
Présentation des principes Scrum
 
Impacts de l'adoption de Scrum
Impacts de l'adoption de ScrumImpacts de l'adoption de Scrum
Impacts de l'adoption de Scrum
 
Du Manifeste Agile à Scrum
Du Manifeste Agile à ScrumDu Manifeste Agile à Scrum
Du Manifeste Agile à Scrum
 
Expression des besoins pour le SI
Expression des besoins pour le SIExpression des besoins pour le SI
Expression des besoins pour le SI
 

En vedette

Dependency Injection Smells
Dependency Injection SmellsDependency Injection Smells
Dependency Injection SmellsMatthias Noback
 
Symfony2 & l'architecture Rest
Symfony2 & l'architecture Rest Symfony2 & l'architecture Rest
Symfony2 & l'architecture Rest Ahmed Ghali
 
Créer une API GraphQL avec Symfony
Créer une API GraphQL avec SymfonyCréer une API GraphQL avec Symfony
Créer une API GraphQL avec SymfonySébastien Rosset
 
CoAP master presentaion
CoAP master presentaionCoAP master presentaion
CoAP master presentaionTarik Sefiri
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSAntonio Peric-Mazar
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)Yacine Rezgui
 
Introduction au business modèle des applications mobile
Introduction au business modèle des applications mobileIntroduction au business modèle des applications mobile
Introduction au business modèle des applications mobileAbdelkader Rhouati
 
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigSymfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigAbdelkader Rhouati
 
Symfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesSymfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesAbdelkader Rhouati
 
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2Abdelkader Rhouati
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleAbdelkader Rhouati
 
Introduction à l'IoT: du capteur à la donnée_Presentation Mix-IT2015
Introduction à l'IoT: du capteur à la donnée_Presentation Mix-IT2015Introduction à l'IoT: du capteur à la donnée_Presentation Mix-IT2015
Introduction à l'IoT: du capteur à la donnée_Presentation Mix-IT2015Sameh BEN FREDJ
 

En vedette (12)

Dependency Injection Smells
Dependency Injection SmellsDependency Injection Smells
Dependency Injection Smells
 
Symfony2 & l'architecture Rest
Symfony2 & l'architecture Rest Symfony2 & l'architecture Rest
Symfony2 & l'architecture Rest
 
Créer une API GraphQL avec Symfony
Créer une API GraphQL avec SymfonyCréer une API GraphQL avec Symfony
Créer une API GraphQL avec Symfony
 
CoAP master presentaion
CoAP master presentaionCoAP master presentaion
CoAP master presentaion
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)
 
Introduction au business modèle des applications mobile
Introduction au business modèle des applications mobileIntroduction au business modèle des applications mobile
Introduction au business modèle des applications mobile
 
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigSymfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en Twig
 
Symfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesSymfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulaires
 
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation Générale
 
Introduction à l'IoT: du capteur à la donnée_Presentation Mix-IT2015
Introduction à l'IoT: du capteur à la donnée_Presentation Mix-IT2015Introduction à l'IoT: du capteur à la donnée_Presentation Mix-IT2015
Introduction à l'IoT: du capteur à la donnée_Presentation Mix-IT2015
 

Similaire à Etude des Frameworks PHP

Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimLaurent Broudoux
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicEmmanuel Hugonnet
 
Presentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupPresentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupMichael Bertocchi
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Guillaume RICHARD
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outilsAgile Tour 2009 Québec
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation SymfonyJeremy Gachet
 
Presentation du framework symfony
Presentation du framework symfonyPresentation du framework symfony
Presentation du framework symfonyJeremy Gachet
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
DEVASC_Module_7 - Infrastructure & automatisation.pptx
DEVASC_Module_7 - Infrastructure & automatisation.pptxDEVASC_Module_7 - Infrastructure & automatisation.pptx
DEVASC_Module_7 - Infrastructure & automatisation.pptxTasnimBenAmmar
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db firstZineb ELGARRAI
 
Devops Introduction au mouvement
Devops Introduction au mouvementDevops Introduction au mouvement
Devops Introduction au mouvementUlrich VACHON
 

Similaire à Etude des Frameworks PHP (20)

Cours spring
Cours springCours spring
Cours spring
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
 
Les framework mvc
Les framework mvcLes framework mvc
Les framework mvc
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
Presentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupPresentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afup
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
 
Feature team primer_fr
Feature team primer_frFeature team primer_fr
Feature team primer_fr
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation Symfony
 
Presentation du framework symfony
Presentation du framework symfonyPresentation du framework symfony
Presentation du framework symfony
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
DEVASC_Module_7 - Infrastructure & automatisation.pptx
DEVASC_Module_7 - Infrastructure & automatisation.pptxDEVASC_Module_7 - Infrastructure & automatisation.pptx
DEVASC_Module_7 - Infrastructure & automatisation.pptx
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
Devops Introduction au mouvement
Devops Introduction au mouvementDevops Introduction au mouvement
Devops Introduction au mouvement
 

Plus de JEAN-GUILLAUME DUJARDIN (15)

PHP, the GraphQL ecosystem and GraphQLite
PHP, the GraphQL ecosystem and GraphQLitePHP, the GraphQL ecosystem and GraphQLite
PHP, the GraphQL ecosystem and GraphQLite
 
Do you speak technique ?
Do you speak technique ?Do you speak technique ?
Do you speak technique ?
 
Livre blanc docker
Livre blanc docker Livre blanc docker
Livre blanc docker
 
Conception d'un Extranet
Conception d'un ExtranetConception d'un Extranet
Conception d'un Extranet
 
Framework JavaScript Web - Brief techno
Framework JavaScript Web - Brief technoFramework JavaScript Web - Brief techno
Framework JavaScript Web - Brief techno
 
Modèle cahier des charges site web
Modèle cahier des charges site webModèle cahier des charges site web
Modèle cahier des charges site web
 
Gérer un pic d'audience
Gérer un pic d'audienceGérer un pic d'audience
Gérer un pic d'audience
 
3 piliers d'un bon référencement web
3 piliers d'un bon référencement web3 piliers d'un bon référencement web
3 piliers d'un bon référencement web
 
Brief Nouveaux outils collaboratifs
Brief Nouveaux outils collaboratifsBrief Nouveaux outils collaboratifs
Brief Nouveaux outils collaboratifs
 
Livre Blanc Web temps réel - Node JS
Livre Blanc Web temps réel - Node JSLivre Blanc Web temps réel - Node JS
Livre Blanc Web temps réel - Node JS
 
Livre Blanc Sauvetage de projets
Livre Blanc Sauvetage de projetsLivre Blanc Sauvetage de projets
Livre Blanc Sauvetage de projets
 
Intranet 2.0
Intranet 2.0Intranet 2.0
Intranet 2.0
 
Hec Web Marketing
Hec Web MarketingHec Web Marketing
Hec Web Marketing
 
Livre blanc améliorez les performances de vos projets web - v1.1
Livre blanc   améliorez les performances de vos projets web - v1.1Livre blanc   améliorez les performances de vos projets web - v1.1
Livre blanc améliorez les performances de vos projets web - v1.1
 
TCM - Livre blanc sur les plateformes communautaires Open Source
TCM - Livre blanc sur les plateformes communautaires Open SourceTCM - Livre blanc sur les plateformes communautaires Open Source
TCM - Livre blanc sur les plateformes communautaires Open Source
 

Etude des Frameworks PHP

  • 1. CAHIER TECHNO FRAMEWORK PHP Un test « en temps réel » sur un cas d’école
  • 2.                   2  /  18   Introduction Qu’y a-t-il dans ce cahier techno ? Nous proposons une approche plutôt pragmatique pour présenter les principaux frameworks PHP. Nous nous sommes dit que les principaux critères de choix d’un framework étaient d’en comprendre facilement le fonctionnement, réussir à le prendre en main rapidement et avoir accès à une documentation complète. Fort de ce constat, nous avons choisi de tester (en essayant d’être le plus objectif possible) la mise en œuvre d’un cas d’école. En bref, ce cahier a pour but de dépasser la discussion d’experts qui ont la fâcheuse tendance à finir par préconiser ce qu’ils connaissent ! La première partie fait une rapide synthèse des raisons qui poussent à utiliser un framework de manière générale et dans la deuxième partie, David Négrier, notre CTO réalise et commente en « temps réel » le développement de ce test. A qui s’adresse ce livre blanc ? Evidemment, ce cahier s’adresse à ceux qui vont lancer les travaux de développement de leur projet web. Il vous permettra d’avoir un éclairage objectif des différents aspects de ces frameworks afin que vous fassiez le choix le plus approprié à votre projet et votre équipe. Toute l’équipe de TheCodingMachine se tient également à votre disposition pour discuter du sujet, concevoir et implémenter vos nouveaux projets !
  • 3.                   3  /  18   D’abord, pourquoi utiliser un framework ? Définition et intérêt d’un framework de développement Un framework fournit aux développeurs un cadre de travail (un framework quoi ;-)) qui guide l’architecture de développement en conduisant les développeurs à respecter certaines normes. Les frameworks sont conçus pour augmenter la productivité des développements et assurer le respect des bonnes pratiques facilitant ainsi la maintenance et les évolutions d’une application. Le choix d’un framework s’impose dans la majorité des projets PHP car, au- delà du gain en productivité, il permet d’industrialiser les travaux de développement et de garantir la qualité du code.
  • 4.                   4  /  18   Principaux composants d’un framework La grande majorité des frameworks reprennent les éléments suivants :
  • 5.                   5  /  18   Quels sont les frameworks que nous avons testés ? PHP étant un langage accessible et très apprécié des développeurs web, il existe une multitude de framework. (cf : http://fr.wikipedia.org/wiki/Liste_de_frameworks_PHP). Quelques-uns se détachent par leurs fortes utilisations (ce sont tous des frameworks MVC) : -­‐ Symfony 2 : Un des grands framework, il est assez complexe mais intéressant pour les grands projets. Il convient de préciser qu’il est supporté par une équipe française et par conséquent très utilisé en France ; -­‐ Zend Framework 2 : Les créateurs de Zend font partie des développeurs pionniers dans la conception de PHP (rien que ça !). Leur framework, comparable à Symfony 2, est une référence mondiale ; -­‐ Silex : Les concepteurs de Symfony ont créé un framework minimaliste adapté pour les projets de taille raisonnable ; -­‐ Code Igniter : Framework ultra léger (quelques heures suffisent pour apprendre à l’utiliser). Il souffre des défauts de ses qualités, c’est-à- dire qu’il peut être un peu trop simple sur certains projets. Il en existe bien évidemment pleins d’autres très utilisés. Citons Laravel, Yii, CakePHP… Nous n’avons hélas pas eu le temps de tous les analyser, et cela ne signifie pas qu’ils sont sans intérêt. Le cas d’école Nous avons comparé les fonctionnalités des quatre frameworks sélectionnés afin de vous fournir une analyse fine au travers d’un cas concret. Pour ce faire, nous avons effectué un test en situation. Ce test a consisté à chronométrer le temps nécessaire pour réaliser une application de carnet d’adresse, avec les fonctionnalités suivantes : -­‐ Liste des adresses paginée, ordonnable par colonnes ; -­‐ Formulaire de création / modification d’adresse.
  • 6.                   6  /  18   Un mot à propos du testeur Le test a été effectué par David Négrier, notre CTO dans le cadre d’une mission d’audit pour l’un de nos clients. David est le lead developper de Mouf, notre framework d’injection de dépendance. Etant lui-même auteur d’un framework, il n’a aucune raison de favoriser un framework plutôt qu’un autre… à part Mouf bien sûr mais nous ne le testerons pas, nous ne serions pas objectifs. David dispose d’une forte maitrise du PHP et de tous les designs patterns associés aux frameworks ainsi que de toutes les bonnes pratiques de développement. À travers ce test, il a essayé, en toute transparence, de respecter toutes les bonnes pratiques de développement, notamment concernant l’injection de dépendance.
  • 7.                   7  /  18   Symfony 2 Présentation L’un des 2 mastodontes du monde PHP (l’autre étant Zend Framework 2). Symfony 2 est extrêmement complet. Il s’appuie pour certaines briques sur des librairies externes de qualité (par exemple, l’ORM est géré par Doctrine 2, qui est un projet externe aussi utilisé en option par Zend Framework). Les composants constituant Symfony 2 sont faiblement couplés et peuvent pour la plupart être utilisés de manière unitaire (voir Silex à ce sujet). Ils sont tous d’excellente qualité et bien documentés (avec une traduction française disponible). Le « liant » entre les composants est effectué par la notion de « Bundle » et par injection de dépendance. Un bundle est un ensemble de fonctionnalités verticales qui peut être réutilisé. Un bundle peut donc contenir un ou plusieurs contrôleurs, des vues, des entités (objets stockés en base de données), des services, etc. Cette notion de bundle est légèrement redondante avec la notion de package de Composer (Symfony2 a été développé avant Composer), ce qui peut rajouter de la complexité. De même, la notion de bundle posera souvent des questions que le développeur ne se poserait pas autrement : combien de bundle ? Quelle fonctionnalité mettre dans quel bundle ? Le gros avantage des bundles est de pouvoir être redistribués. Le site http://knpbundles.com référence ainsi 1900 bundles, allant du template Bootstrap au mécanisme de gestion d’utilisateurs standardisé. Développement de l’application test 0 mn L’installation se fait par Composer. Une fois l’installation effectuée, une page effectue une vérification de ma configuration de PHP. Elle m’informe que ma version de APC n’est pas suffisante. Je mets donc à jour APC.
  • 8.                   8  /  18   9 mn Je créé un premier bundle en utilisant l’outil en ligne de commande qui m’aide à le mettre en place, puis un contrôleur en suivant le tutoriel. L’utilisation des annotations est élégante et agréable à utiliser. Le référencement du contrôleur dans la configuration n’est pas trivial mais bien documenté (22 minutes) 31 mn Je cherche à disposer d’un template Bootstrap. Je recherche un bundle, en choisit un à jour (d’autres ne fonctionnent qu’avec la version beta) et l’installe. Le bundle requiert « Assetic », un autre bundle extrêmement puissant qui se charge de la gestion des fichiers JS et CSS (et de la compilation des fichiers LESS en CSS). Puissant mais complexe à utiliser. Je finis par réussir à compiler les fichiers LESS et obtenir mon template en 47 minutes. 1h18 Je passe à la partie base de données. J’utilise Doctrine 2 pour créer un objet qui va générer la table. Cette approche peut s’avérer problématique lorsque le modèle de données est fourni et qu’il faut s’y adapter. L’utilisation de Doctrine est néanmoins très facile. Il me faut moins de 15 minutes pour mettre en place la table, et un mécanisme de sauvegarde. Je développe également un formulaire d’ajout / édition en utilisant Symfony Forms. Le mécanisme est élégant et s’intègre bien avec Doctrine, même s’il posera très certainement de fortes limitations pour les formulaires avancés. 1 h 33 Je télécharge un bundle permettant d’afficher les listes avec une pagination. Il existe de nombreux bundle permettant de le faire. L’installation de bundle est toujours un peu complexe, et pas toujours bien documentée suivant le bundle, mais il est facile de trouver des réponses sur internet. Le composant de pagination s’intègre avec Doctrine. 42 minutes 2 h 15 A ce stade, j’ai un carnet d’adresse fonctionnel. Cependant, je suis assez surpris par les différents tutoriels. Ils m’encouragent à accéder aux différents composants depuis le contrôleur par leur nom (ServiceLocator pattern). Par exemple, dans le contrôleur, on m’encourage à accéder à un service avec cette ligne de code pour accéder à Doctrine : $em = $this->get('doctrine.orm.entity_manager'); Cette approche est un « anti-pattern ». Voir à ce sujet cet article : http://blog.astrumfutura.com/tag/service-locator/
  • 9.                   9  /  18   Au contraire, le framework devrait être capable d’injecter toutes les dépendances dans le contrôleur avant que je ne l’utilise. Je devrais directement pouvoir utiliser « $this->em » pour acceder à l’objet doctrine sans me soucier de donner son nom. Je me rends alors compte que je dois faire une manipulation pour transformer mon contrôleur en service qui peut être injecté. Cette manipulation est mal expliquée dans la documentation et assez contre-intuitive (alors qu’elle devrait faire partie des étapes logiques de création d’un contrôleur). Je finis par réussir à tout configurer. Temps passé : 53 minutes. 3h08 Je dispose d’une application complète Ressenti : Le cœur de Symfony est bien documenté. Utiliser Doctrine est très rapide et vraiment efficace. L'installation de bundles tiers (Bootstrap qui nécessite Assetic) montre la puissance, mais aussi la complexité de Symfony. L'installation d'un bundle est un peu fastidieuse. Je suis surpris de la configuration de l’injection de dépendance (anti-pattern Service Locator utilisé à la place) qui n’est pas encouragée, et qui est vraiment fastidieuse (fichier XML ou Yaml contre-intuitif).
  • 10.                   10  /  18   Zend Framework 2 Présentation Sorti 1 an après Symfony 2, Zend Framework 2 est très semblable à ce dernier. Il est aussi séparé en briques qui peuvent être utilisées unitairement. Le « liant » entre les composants est effectué par la notion de « Module » (le pendant exact du bundle Symfony 2) et par injection de dépendance. Un module est un ensemble de fonctionnalités verticales qui peut être réutilisé. Un module peut donc contenir un ou plusieurs contrôleurs, des vues, des entités (objets stockés en base de données), des services, etc… Tout comme pour Symfony, cette notion de module est légèrement redondante avec la notion de package de Composer, ce qui peut rajouter de la complexité. De même, la notion de module posera souvent des questions que le développeur ne se poserait pas autrement : Combien de modules ? Quelle fonctionnalité mettre dans quel module ? Le site http://modules.zendframework.com/ référence 470 modules existants. Note : contrairement au site dédié aux modules Symfony, il ne met pas en avant les modules phare de ZF2. Développement de l’application test 0 mn L’installation se fait par Composer. Le premier contact avec le tutoriel / la documentation de Zend Framework est rude. Le tutorial commence par la mise en place de tests unitaires (avant même une première page). S’il s’agit d’une bonne pratique, elle est dure à suivre et le tutorial l’explique mal. De plus, ce n’est pas particulièrement engageant pour un apprentissage : http://framework.zend.com/manual/2.0/en/user-guide/unit- testing.html Je saute cette étape.
  • 11.                   11  /  18   La documentation explique comment créer un module à la main (là où Symfony propose un outil en ligne de commande pour le faire). Pour cela, elle propose de créer 13 (!) répertoires, ainsi que de copier-coller 3 fichiers de configuration cryptiques. Elle ne fait pas référence à l’outil Zend_Tools qui permet de créer son module en ligne de commande facilement. Je trouve et installe Zend_Tools et créé mon module sans suivre la documentation (le processus est bien trop complexe à la main). J’utilise Zend_Tools. Temps écoulé : 9 minutes 9 mn Je débute la mise en place du contrôleur. Le framework Bootstrap est inclus dans le package de base de Zend Framework, donc contrairement à Symfony, je n’ai pas à l’installer. La création du contrôleur est rapide. Le mécanisme de configuration des routes est par contre bien moins intuitif que celui de Symfony (pas d’annotations, configuration à la main dans un fichier difficile à comprendre). Temps : 19 minutes 28 mn Je passe à la mise en place de la base de données. Bien que Zend Framework 2 puisse s’intégrer avec Doctrine, le tutorial conseille d’utiliser le mécanisme natif ZF2 : le TableGateway. Son utilisation est catastrophique. Nécessite un énorme nombre de ligne de codes /classes pour arriver à faire ce que Doctrine fait en quelques lignes. A éviter absolument. Temps : 24 minutes 52 mn Je cherche à afficher une première vue. Le tutorial propose d’utiliser des fichiers PHP pour la gestion du template. Cela place la responsabilité de la sécurité sur le développeur (il ne doit pas oublier de protéger toutes les données entrées par l’utilisateur pour se prémunir des attaques XSS). L’approche Symfony (qui utilise Twig) me paraît meilleure. Réussir à faire fonctionner une vue est complexe (cela nécessite d’éditer un bon nombre de fichiers de configuration). Je fini par mettre en place la liste des adresses, sans pagination. Temps écoulé : 27 minutes 1 h 19 Je mets en place le formulaire de création/modification d’adresse. L’étape est simple mais assez verbeuse. Je n’arrive pas à mettre en place un widget pour la sélection de la date. Note : l’absence d’annotations comme dans Symfony se fait cruellement ressentir. Les contrôleurs sont moins propres, on ne voit pas les paramètres passés.
  • 12.                   12  /  18   Temps écoulé : 5 minutes 1 h 24 Je tente de mettre en place la pagination. Je trouve plusieurs tutoriaux, mais ils ne sont pas à jour (basés sur une version beta du Zend Framework). Ils ne fonctionnent pas. Je tente de faire le mécanisme de pagination à la main. Je n’y arrive pas, la route ne prend pas en compte mes paramètres, j’ai une erreur et rien dans les logs. Impossible de trouver de l’aide à ce sujet. Temps écoulé (sans résultat probant) : 39 minutes 2 h 03 Tout comme pour Symfony, je suis surpris. Le tutorial m’encourage à accéder aux différents composants depuis le contrôleur par leur nom (ServiceLocator pattern). Je souhaite que les services soient injectés directement dans le contrôleur. Ceci est possible. Après plusieurs recherches sur internet qui m’amènent sur de mauvaises pistes, je trouve la solution sur le blog de Marco Pivetta : http://ocramius.github.io/blog/zend- framework-2-controllers-and-dependency-injection-with-zend-di/ Le gestionnaire d’injection de dépendance de ZF2 semble être plus facile à utiliser que celui de Symfony2. On peut injecter les dépendances en utilisant des closures, ce qui est beaucoup plus facile que la configuration XML. Le système ressemble à Pimple (voir Silex plus bas). Temps écoulé : 54 minutes 2 h 57 Je dispose d’une application incomplète sans widget pour l’affichage des dates et sans pagination. Ressenti : Zend Framework 2 et Symfony 2 se ressemblent beaucoup. Cependant, là où Symfony fait beaucoup pour l’utilisateur (configuration par les annotations, etc.), Zend Framework est plus dur d’accès. Surtout, la documentation est vraiment moins aisée à suivre que celle de Symfony. Le framework en devient cryptique par moment et très peu engageant. Toutes les modifications sont complexes à gérer et on ressent réellement la lourdeur du framework et un manque d’agilité. Alors que Zend Framework 2 propose des fonctionnalités similaires à Symfony 2 (ligne de commande Zend Tools, ORM Doctrine2, etc…), le tutorial n’accompagne pas le développeur dans l’utilisation de ces outils.
  • 13.                   13  /  18   Silex Présentation Silex est un « micro-framework ». Basé sur les composants de Symfony 2, il permet de réutiliser facilement les templates Twig, la génération de formulaire de Symfony etc., mais sans la complexité liée aux gros frameworks (pas de bundle ou de modules). Il dispose d’un mécanisme simple (voir simpliste) d’injection de dépendance : Pimple. Il n’y a pas de nombreux fichiers de configuration. Toute la configuration de l’application (injection de dépendance et routes) se situe dans le fichier index.php. L’approche de Silex ressemble à Sinatra (Ruby) ou à Express.js (NodeJS) dans la syntaxe de définition des routes. Ne disposant pas de mécanisme d’ORM propre, j’ai rajouté Doctrine dans le projet Pimple pour gérer les accès à la base. Développement de l’application test 0 mn L’installation se fait par Composer. Le template doit être créé à la main. Je télécharge Bootstrap, jQuery, je créé le template Bootstrap. Je configure mon premier contrôleur. Tout comme Symfony et Zend Framework, Silex n’encourage pas la création d’un contrôleur utilisant l’injection de dépendance. La configuration de celui-ci pour supporter l’injection de dépendance est par contre triviale (contrairement à Symfony et ZF2), grâce à Pimple, un mécanisme simple et bien pensé. 48 mn Mon template est en place, je débute l’installation de Doctrine. L’installation manuelle est plus complexe que l’installation via Symfony 2 (2 fichiers de configuration à créer). Rien d’insurmontable cependant. Temps écoulé : 36 minutes 1 h 24 Contrairement aux 2 autres tests sous Symfony et ZF, je décide d’utiliser une grille Ajax. La grille que je choisi est mal documenté
  • 14.                   14  /  18   ce qui me fera perdre du temps. J’utilise le mécanisme de génération de formulaires de Symfony 2 (ce qui me permet de réutiliser quasiment ligne pour ligne le code développé dans le projet Symfony 2). Temps écoulé : 99 minutes. 3 h 03 Je fais une passe de « proprification », rajout de liens dans la grille… Temps écoulé : 11 minutes 3 h 14 Je dispose d’une application propre Ressenti : Silex est réellement agréable à utiliser. On n’est pas perdu dans les différents fichiers de configuration, et on arrive très vite à une solution très propre. Les contrôleurs sont des classes PHP simples sans aucune dépendance sur le framework (découplage maximal).
  • 15.                   15  /  18   Code Igniter Les points mis en avant pour ce framework par les développeurs sont : -­‐ Un framework de petite taille ; -­‐ De très bonnes performances ; -­‐ Simple. Si ce framework connait un certain succès, il dispose hélas de défauts rédhibitoires : -­‐ Repose sur une convention de nommage incompatible avec la norme PSR-0 ; -­‐ Pas de paquet Composer disponible ; -­‐ Pas de moteur d’injection de dépendance ; -­‐ Pas de moteur de template par défaut (on peut en rajouter un cependant). Le carnet d’adresse n’a pas été réalisé pour ce framework, qui est très loin des standards du moment.
  • 16.                   16  /  18   Un petit bonus avec Mouf Nous n’avons pas fait le test concernant le framework Mouf car nous avons considéré que nous ne pouvions pas être juge et partie, normal on ne renie pas ses enfants ! Sachez simplement que Mouf aurait remporté cet exercice haut la main. C’est le meilleur et le plus beau ! Néanmoins, je ne peux pas m’empêcher de vous ajouter une petite présentation à son sujet. Présentation Mouf est un framework PHP d’injection de dépendances avec une interface de développement web ergonomique pour les développeurs. L’intérêt de Mouf est de permettre aux développeurs de réutiliser des composants qu’ils ont développés ou qui ont été développés par d’autres. Mouf agrège des bibliothèques de composants et vous aide à les lier ensemble. Mouf est en même temps un framework d’injection de dépendance pour la partie graphique et un framework de développement Web complet avec des centaines de paquets disponibles. De plus, Mouf peut être utilisé en complément d’autres frameworks et s’intégrer dans des environnements tels que Zend, Symfony 2, Drupal, WordPress, etc. N’hésitez pas à visiter le site web : http://mouf-php.com
  • 17.                   17  /  18   Conclusion L’utilisation d’un framework est aujourd’hui une norme pour les projets professionnels, il vous garantit d’avoir un code maintenable et évolutif. Le choix du bon framework doit répondre aux critères de votre projet (taille du projet, compétence de l’équipe, fonctionnalités souhaitées etc.). Pour les très grosses applications, Symfony 2 semble prendre l’avantage. Une bonne documentation associée à la présence de nombreux bundles sont les principaux atouts de ce framework. Certains bundles phares, comme Sonata qui permet de gérer les interfaces d’administration facilement, peuvent accélérer considérablement le développement. Cependant, la tendance actuelle est clairement à la séparation en composants plus petits et plus maniables. Ainsi, Silex, présenté comme un micro-framework pour les petites applications, peut en fait être utilisé pour bien plus, à condition de s’en servir comme routeur, avec les bonnes librairies en support (Doctrine et Twig principalement). Ainsi, il n’est plus rare de développer des applications en utilisant des composants unitaires d’un framework ou d’un autre. Afin de faciliter l’interopérabilité des différents composants des frameworks entre eux, un groupe de travail - le PHP Framework Interoperability Group (ou PHP-FIG) - s’est formé pour favoriser la création d’interfaces communes. Dans le futur, il est donc probable qu’on opposera moins des frameworks monolithiques, mais qu’au contraire, on les fera travailler ensemble, chacun sur leur point fort.
  • 18.                   18  /  18               A propos de TheCodingMachine TheCodingMachine accompagne ses clients sur des missions de conseil technologique et sur des projets de développement d'applications Web. Nous sommes spécialisés dans le développement de sites Internet, d’intranets, d’applications Web métiers en PHP et en JavaScript. Fondée, en 2005, par trois anciens consultants technology d’Accenture, TheCodingMachine a piloté plus de 200 projets. Nous travaillons aussi bien pour des grands comptes privés et publics, pour des PME-PMI que pour des startups. Nous avons investis dès notre création dans la R&D, ce qui nous permet par exemple d’être à la pointe des technologies temps réel (Node.JS, Backbone.JS, AngularJS, streaming video, chat etc.). Besoin d’assistance pour votre projet web ? D’un expert technique ? N’hésitez pas à nous solliciter ! contact@thecodingmachine.com 01 71 18 39 73