Est-il judicieux d'éviter un cadre lors de la création d'une grande application Web avec PHP?

9

En tant que développeur d'applications Web PHP depuis plusieurs années, j'ai eu ma part de MVC et de frameworks. Au début, je pensais que c'était la meilleure chose depuis le pain en tranches; tout semblait très facile à mettre en œuvre.

Maintenant cependant, il semble que plus l'application devient complexe, plus le cadre introduit de tracas, donc je dois développer des solutions de contournement pour les surmonter. Ces solutions de contournement sont généralement assez intimidantes et complexes car je dois me plonger dans le code de base du framework et apporter des modifications pour qu'il se comporte comme je le souhaite.

Par exemple, dans l'un de mes projets où j'utilise Slim (C) + Idiorm (M) + Twig (V) (qui je pense est très flexible), je dois créer une fonction personnalisée juste pour afficher des données dynamiques dans les modèles parents; sans framework, j'aurais pu simplement exécuter mysql_query () dans le fichier inclus.

D'accord, les frameworks sont cool si je crée un simple site Web de profil d'entreprise; Je peux simplement fouetter du code en une nuit et ils sont généralement prêts le matin, et la quantité de bonnes pratiques de codage et de modèles de conception que j'ai appris d'eux est très précieuse.

Mais vraiment, pour une application Web complexe comme un système de gestion d'école Web tout-en-un, les cadres gênent généralement mon processus d'entreprise comme dans l'exemple ci-dessus.

Donc ma question est: est-ce correct de revenir aux bases et d'utiliser du code PHP standard et des bibliothèques pour faire mon prochain projet où il pourrait y avoir des frameworks et des bibliothèques de gazillion, à condition que je puisse utiliser suffisamment de bonnes pratiques de codage et suivre des modèles de conception sensés comme MVC? Mon équipe de développement est assez petite: seulement 2 programmeurs et 1 designer. L'autre programmeur est d'accord avec mes pensées ci-dessus.

Furunomoe
la source
1
"Cependant, plus l'application est complexe, plus je ressens de problèmes avec les frameworks". C'est juste argumentatif et subjectif. Pouvez-vous supprimer ce type de plainte et passer à la vraie question? Pouvez-vous fournir des exemples concrets et spécifiques d'un problème que vous souhaitez résoudre? Si c'est juste "je n'aime pas les frameworks", ce n'est pas vraiment une très bonne question. Vous pourriez peut-être vous concentrer sur quelque chose où il y a une vraie réponse, pas un partage d'opinions.
S.Lott
@ S.Lott: Eh bien, je donne un exemple dans ma question. Et en fait, je ne déteste pas les frameworks. Je veux juste savoir ce que les gens pensent de ne pas utiliser de framework PHP dans les temps modernes.
Furunomoe
"J'ai souvent dû créer une fonction personnalisée juste pour afficher des données dynamiques"? N'est pas un exemple très détaillé. Il n'est pas clair pourquoi ou comment le cadre vous a échoué. Il y a une possibilité très éloignée que vous n'utilisiez pas correctement le framework.
S.Lott

Réponses:

17

Mon expérience est à peu près l'opposé de la vôtre. Lorsque vous faites de petites choses rapides, un framework peut "vous gêner" un peu car vous devez disposer votre code d'une certaine manière et réfléchir soigneusement avant de continuer. En sautant directement sur, mysql_queryvous pouvez faire fonctionner votre prototype beaucoup plus rapidement.

Mais pour les grands sites complexes, il est extrêmement important de disposer soigneusement le code et de vraiment réfléchir à la façon dont vous écrivez votre code si vous voulez un site qui sera maintenable à l'avenir.

En particulier, l'ajout d' mysql_queryappels à des parties aléatoires du cycle de page est généralement une très mauvaise idée. Vous pourriez en avoir un ici et un là pour commencer et ce n'est pas grave, mais avant longtemps, vous en auriez une douzaine dispersés partout et vous vous demandez pourquoi vos pages prennent 3 secondes juste pour être rendues. Ou vous modifiez votre schéma et des sections apparemment sans rapport du site pour des raisons inconnues.

Dean Harding
la source
1
Bien sûr, je ne fais pas que lancer un hasard mysql_query()ici et là. Je veux dire, en PHP classique, je peux simplement ajouter un appel à quelque chose comme Categories::read_all()et parcourir le résultat dans un fichier header.php, tandis que dans Twig, je dois créer une fonction Twig personnalisée pour cela. Et pour le prototypage, j'adore les fonctionnalités d'échafaudage :)
Furunomoe
1
vous n'avez pas besoin d'un cadre pour soigneusement mettre en page et penser à votre code. il est plus facile de le faire sans le cadre. les frameworks vous imposent des modèles d'organisation de code médiocres.
Raynos
3
Les cadres brillent vraiment lorsque vous réalisez des projets complexes car ils définissent un ensemble de règles et de directives que vous devez suivre. J'ai attribué la mention +1 à Dean parce que c'est aussi mon expérience.
Burhan Khalid
7

À mon avis, un cadre ne doit être utilisé que s'il facilite le processus de développement pour vous et n'est pas encombrant. Il n'y a rien de mal à ne pas utiliser de framework ou à créer le vôtre, en particulier pour les petits projets.

Évidemment, vous devrez toujours faire attention à la structure et aux aspects de sécurité, mais étant donné que vous utilisez des frameworks depuis de nombreuses années, vous connaissez probablement déjà ces aspects à l'envers.

Pour les projets plus importants, je suis d'accord avec les autres, ce qui signifie que l'utilisation d'un cadre sera probablement la meilleure option à long terme.

Daniel Scocco
la source
Ce qui est plus facile pour un petit site peut ne pas l'être pour un grand. Et l'inverse.
Goran Jovic
1
@ Goran Jovic, d'accord.
Daniel Scocco
1
+1 pour building your own. Que vous le réalisiez ou non, vous vous retrouverez avec de nombreuses fonctions d'assistance et / ou classes, qui pourraient être considérées comme votre propre framework.
Izkata
5

Mes expériences avec les "frameworks" côté serveur ont été assez désagréables, par exemple:

A) Enfer de fichiers Jar où les cadres entrent en conflit les uns avec les autres ou avec le serveur d'applications pour les versions mutuellement incompatibles de choses que vous ne voulez pas et ne savez rien et ne sont pas en mesure de dicter de toute façon car cela vous empêchera de déployer sur plusieurs serveurs.

B) Explosion catastrophique de la création d'objet la plus simple en des milliers d'exécutions SQL inutiles.

C) L'idée bizarre que le codage de 100 lignes de XML est en quelque sorte plus facile ou plus fiable que le codage de 2 lignes de Java.

D) La nécessité d'écrire des centaines de lignes de POJOS côté serveur complètement inutiles à mapper sur des objets côté client dans un autre, ou parfois plusieurs autres langues (C # JS, etc.)

E) Ne pas avoir la moindre idée de ce qui s'est réellement passé lorsque vous obtenez une trace de pile profonde à 30 niveaux qui n'inclut même pas la ligne de code que vous avez utilisée pour appeler le framework.

Soyez un renégat, écrivez votre propre cadre ... vous ne le regretterez pas tant que vous prévoyez d'abord d'éliminer toutes les choses inutiles que les autres vous trompent en pensant que vous avez besoin. Ensuite, vous comprendrez tout cela, il sera expédié en Ko au lieu de Mb et il fonctionnera probablement n'importe où, ce qui était l'un des principes fondateurs de Java, n'est-ce pas?

Essayez de penser de cette façon "pourquoi ai-je besoin de cela ... est-ce juste pour garder le cadre heureux?" .. Si je n'en ai pas besoin, alors de quoi d'autre n'ai-je pas besoin?

Chris Harlow
la source
4

Il y a eu une présentation par les développeurs de Django, que j'ai du mal à trouver maintenant, mais ils parlent de la "vallée de l'efficacité" où un framework vous rend plus productif.

En supposant que vous ne connaissiez pas le cadre lorsque vous démarrez un projet, votre productivité sera initialement très faible - vous apprendrez la convention du cadre plutôt que l'idiome de la langue (qui, espérons-le, vous le savez déjà).

Après un court laps de temps, vous aurez compris les conventions et c'est là que les frameworks brillent vraiment - tout à coup, votre productivité passe par le toit et vous progressez et une vitesse incroyable à travers le développement.

Finalement, cependant, le projet deviendra d'une taille telle que le cadre sera plus une contrainte qu'une aubaine, et vous vous verrez vous balancer contre le cadre pour essayer d'implémenter certaines fonctionnalités.

Dans la présentation, ils mentionnent que, bien sûr, si vous avez déjà une connaissance des conventions du cadre, les projets de plus petite taille n'ont pas l'obstacle initial à l'efficacité.

Ainsi, pour les petits projets (d'après mon expérience, tout ce qui est inférieur à ~ 500 heures), votre efficacité avec un framework sera probablement plus grande que votre efficacité sans. Une fois que vous atteignez un certain seuil (entre 500 et 800 heures, IME), vous commencez à réaliser qu'il y a des limites à ce que le cadre peut offrir.

Cela dit, les frameworks offrent un bien plus grand avantage que la simple efficacité - un framework comme Symfony ou Django ou (je suppose) Rails fournit une convention qui permet à une équipe de fléchir dynamiquement et permet également aux clients ou aux propriétaires de produits de changer de personnel sans nécessiter la nouvelle ressource pour réapprendre complètement un nouveau système - s'ils connaissent la convention d'un cadre, et que cette convention a été suivie, ils seront beaucoup plus productifs au départ qu'autrement.

Jonathan Rich
la source
4

Un cadre bien conçu devrait être une aide pour le programmeur, pas un obstacle. Si le cadre que vous avez utilisé vous gêne trop, je suggérerais d'envisager un cadre différent. Chacun a son propre style de codage et ses propres avantages et inconvénients.

Cela dit, le framework Zend semble être extrêmement populaire de nos jours, et honnêtement? J'ai du mal à voir pourquoi parfois. J'ai dû y travailler par le passé et je n'ai pas du tout aimé son architecture. La classe Zend_Form est ridiculement surchargée d'ingénierie, son système de décoration est tout à fait horrible à utiliser, et les décorateurs lient les formes aux vues, brisant un concept fondamental de POO indiquant que les objets doivent être couplés de manière lâche. Il a également beaucoup de code implémenté en singletones (qui sont mauvais pour des raisons bien documentées, donc je ne le répéterai pas) et l'objet Registry contribue également à encourager un style de codage bâclé.

J'ai entendu dire que Zend Framework 2 (actuellement en version bêta) est un bien meilleur produit, mais le mauvais goût que Zend 1 a laissé dans ma bouche signifie que je ne suis pas pressé de l'essayer.

Pourtant, à ce stade, je me lamente. :) Il existe de nombreux cadres, chacun avec ses avantages et ses inconvénients, je suggère d'en évaluer quelques-uns.

GordonM
la source
3

Ce que vous décrivez a été appelé «complexité induite par l'abstraction» dans le passé. Le seul document sur sa gestion est: Gestion de la complexité induite par l' abstraction par David Keppel. Keppel suggère que les cadres ont une conception qui entraîne une complexité induite par l'abstraction.

Bruce Ediger
la source
2

Travailler avec un framework vous aide à accélérer votre développement en ne réinventant pas la roue . Framework vous fournit également les outils pour vous aider à concevoir correctement votre application (mais cela ne vous empêche pas de prendre de mauvaises décisions de conception, par exemple accéder à la base de données directement depuis la vue).

Parfois, lorsque vous avez besoin d'une fonctionnalité personnalisée, son écriture peut prendre plus de temps. Mais si vous piratez et trouvez constamment des solutions de contournement, vous travaillez contre le cadre ou le cadre ne convient pas à vos besoins.

En résumé, l'utilisation d'un grand cadre pour des projets simples (par exemple, l'affichage de quelques champs d'une base de données) peut parfois être exagérée. Pour les projets grands ou complexes, utilisez un framework.

Christian P
la source
1

L'écriture de votre propre code présente plusieurs aspects par rapport à l'utilisation d'un Framework:

La taille, les connaissances de base et l'expérience de l'équipe avec laquelle vous travaillez : S'ils n'ont jamais utilisé un framework ou ont une idée de la façon d'architecturer une application, vous êtes meilleur avec un framework bien documenté avec beaucoup d'exemples et voyez que vous les accélérez vers le haut.

La taille de l'application : on ne sait jamais à l' avance comment elle sera utilisée. Il vaut donc mieux être préparé pour grandir et changer. Votre framework, que vous souhaitez coder en une nuit, peut-il évoluer avec les besoins de la direction? Changez les types de champs dans la base de données et cela prend une minute ou un jour à implémenter, c'est mon point ici.

La préparation : si vous utilisez un framework, vous pouvez commencer à concevoir l'application au lieu de coder le cœur de votre application, utilisez-en un où la sécurité et le déploiement sont des éléments importants, c'est ce qui prend tellement de temps. À chaque fois.

Je discute toujours avec "la direction" pour utiliser Symfony2 car c'est un framework pour le développement web. La direction pense que c'est trop gros, cela coûtera de l'argent et évitera les programmeurs car la courbe d'apprentissage est abrupte.

éblouir
la source
0

Les cadres vont toujours être utilisés pour n'importe quelle langue dans le moderne, en particulier pour les grands projets. Plus un projet est grand, plus le cadre est important, vous savez donc où se trouve la logique pour tout, et chaque fonctionnalité a une disposition similaire. Il facilite la modification d'un projet et son apprentissage lorsque vous savez où rechercher tous les accès aux données, ou toutes les présentations, ou où les règles métier sont gérées.

Il est cependant nécessaire de choisir un cadre qui convient au projet, une solution d'entreprise nécessite un cadre capable d'entreprise. C'est le problème que vous allez rencontrer lors de l'utilisation de PHP. De nombreux (la plupart) des frameworks ne sont pas destinés à être utilisés à grande échelle, mais ils fonctionnent bien pour les petits sites personnels. Pour quelque chose comme le système de gestion scolaire que vous mentionnez, cela va nécessiter un framework plus robuste, et cela peut prendre un certain temps pour trouver un framework approprié en PHP.

Ryathal
la source