Lors de la conception de son projet web, nous sommes tous confrontés aux différents choix techniques. Faut-il succomber à l'utilisation d'un, ou plusieurs frameworks, ou tout faire soit même ? La réponse n'est pas si simple.
Aujourd'hui le nombre de frameworks explose, parmi les plus connus nous pouvons citer : Symfony, Zend, CakePHP ou encore CodeIgniter coté PHP, AngularJS, BackboneJS ou encore Flight pour le JavasScript et Saas ou Bootstrap pour le CSS (cette liste n'est pas exhaustive, et de nouveaux framework font leur apparition régulièrement). Mais commençons par le début.
Un framework qu'est ce que c'est et à quoi ça sert ?
Selon la définition de Wikipédia, un framework est un ensemble cohérent de composants logiciels structurels, qui sert à créer les fondations ainsi que les grandes lignes de tout ou d’une partie d'un logiciel (architecture).
Retenons que c'est un cadre de travail, une aide pratique, une palette d'outils qui nous évite de réinventer la roue (et surtout de réinventer une roue carrée ...). De ce point de vue il serait donc logique de commencer l'architecture de son projet directement avec un framework, voyons les avantages et les inconvénients.
Avantages et inconvénients
- Les avantages :
- La rapidité de développement du projet. Il sera inutile de re-développer tout un tas de fonctions, servez-vous tout est là ! (ou presque
)
- Pour les frameworks en MVC : Le travail en groupe est simplifié, les designers s'occupent des vues et les développeurs s'occupent de la partie métier, le tout en même temps et sur des fichiers différents. En ajoutant un système de versionning de type GIT le tout est vraiment magique
- Une armée de développeurs rendront toujours un travail plus sécurisant qu'un seul développeur, l'aspect sécurité est très important ne négligez pas ce détail.
- Le coté open sources des solutions
- En parlant d'open source, participez aux évolutions de la communauté, et ajouter le sur votre CV, encore un bon point
- La rapidité de développement du projet. Il sera inutile de re-développer tout un tas de fonctions, servez-vous tout est là ! (ou presque
- Les inconvénients :
- Maitriser un framework prend du temps, cela peut-être quelques heures pour réaliser un travail simple à plusieurs semaines pour l'utilisation avancé d'un framework complexe. Il faut comprendre son fonctionnement interne, connaître les bonnes pratiques, savoir comment débuger, lire la documentation etc ... Histoire de montrer à quel point cela peut être complexe il faut savoir que certaines sociétés font appel à des experts dans certains framework type Symfony ou Zend, il ne suffira donc pas d'un ou deux jours pour maîtriser en détail le sujet, c'est carrément un métier. Mais n'ayez crainte ! Inutile d'être un expert pour une utilisation rapide et d'un niveau de complexité faible.
- C'est lourd ! En effet, imaginez que vous ayez besoin uniquement d'un marteau dans une boite à outils qui contient plus de 1.000 outils différents
... Vous n'aurez certainement jamais un projet qui utilisera 100% des fonctionnalités offertes par le framework !
- Et c'est tout ! Il faut bien l'avouer, nous avons parlé des deux inconvénients majeurs - qui d'ailleurs ne sont pas des plus simple à ignorer - le reste, s'il certains en trouve dérivent généralement de ces deux inconvénients, dans le cas contraire ajouter un commentaire sur ce billet et je l'ajouterai.
Dois-je n'utiliser que des Framework ?
Utiliser un framework juste pour en utiliser un ce n'est pas utile, c'est comme acheter le dernier smartphone avec toutes les applications alors que l'on souhaite juste utiliser la fonction "téléphoner". Il faut poser le problème autrement : Est-ce que l'utilisation de ce framework va me faire gagner du temps ?
On pourrais rapidement, à la vue des avantages se dire que oui, mais il fait bien prendre en compte le temps de mise en place, parfois un simple fichier, parfois beaucoup beaucoup plus, il faut également ajouter la configuration et le temps de formation à ce nouvel outil.
Quelques cas pour se situer avant de commencer un projet.
Si le projet est simple et rapide à réaliser sans framework (en ne négligeant pas la sécurité des données) alors passez votre chemin et créer le tout "from scratch".
Si le projet est complexe et/ou long à réaliser sans framework, alors commencez à y réfléchir très sérieusement.
Si le projet est mixte, quelques parties complexes et d'autres simpliste il faut également prendre le temps de choisir la solution la plus adaptée, ce n'est pas après 2 mois de développement qu'il faut se dire : "en fait, nous aurions obtenu le même résultat en 2 semaines de dév si on avait utilisé tel ou tel framework".
Le travail en groupe rend la question plus complexe : chaque personne connaît elle l'outil ? A t-elle les capacités pour l’appréhender aussi rapidement que son collègue ? Les connaissances vont-elle nous aider à gagner du temps sur d'autres projets futurs ? Si au final le temps que vous avez perdu à réinventer ce qui existe déjà aurait pu servir à l’apprentissage d'un outil complexe pourquoi ne pas prendre ce tas de connaissances comme bonus ?
J'ai pris le premier framework venu, mais ...
Vous ne savez pas trop quoi choisir comme outil mais vous avez fait votre choix, et deux semaines après vous vous rendez compte que même en ayant gagné du temps sur un développement "from scratch", un autre framework aurait été un meilleur choix ? C'est un peu tard, vous avez perdu des jours de développement et donc perdu en rentabilité (sauf pour les chanceux en R&D). C'est pourquoi le choix n'est pas à prendre à la légère.
Conclusion
Malheureusement il n'y à pas de réponse unique, vous vous doutez que ça dépend de la technologie utilisée, de vos compétences, de l'aspect humain et financier du projet. Alors faite un comparatif, pesez le pour et le contre, estimez le temps nécessaire ainsi que les ressources à mettre en œuvre, et seulement après, faîtes votre choix. Mais n'oubliez jamais que le temps est notre ennemie, alors un conseil : ne faîtes pas ce choix hâtivement.