Un framework pour du dev web?

Bonsoir à toutes et tous!

Après deux ans de formation et un premier projet d’application web, je me rends compte que le dev web n’est pas ce qu’il y a de plus clean!

En effet, le mélange html/css/xml/php oblige à faire des choix, quant à la manière de coder, qui ne sont sûrement pas les meilleurs. Mais à vrai dire comment savoir quand on n’a pas assez de recul ou d’expérience?!

C’est pour cette raison que j’aimerais, dans l’avenir, utiliser un framework.

Néanmoins, je me pose pas mal de questions à ce sujet: un framework permet-il de tout faire? Est-ce assez souple? Quel framework utiliser?

Pour prendre un exemple, l’appli web que je suis en train de terminer utilise une cinquantaine de tables d’une db MySQL et permet des opérations classiques comme la création d’un utilisateur, la modification/suppression de ses données via des formulaires, l’affichage de listes, des uploads de fichiers .csv, des calculs d’ancienneté, de présences, etc.

Un framework permet-il de faire cela? Autorise-t-il la création d’une interface “sur mesure” et un minimum “graphique”?

Bref! Si l’un(e) d’entre vous pouvait me faire partager son expérience, ce serait avec grand plaisir… :smiley:

Wow ! C’est un peu comme demander si en général pour un site web il vaut mieux du rouge ou du vert.

La première chose à faire c’est de choisir un langage. Pour le web les principaux me semblent être :
[ul]
[li]PHP[/li]
[li]Python[/li]
[li]Perl[/li]
[li]ruby[/li]
[li]Java[/li]
[li].Net[/li][/ul]

Pour les deux derniers je pense que personne ici ne veut en entendre parler.

Pour les 4 autres ils ont tous un framework qui fait référence, qui gère à peu près tout ce qu’il est possible de gérer et qui sont (de ce que j’ai pu en voir et en entendre parler bon).
[ul]
[li]PHP : Sinphony[/li]
[li]Python : Django (il y a quelques amateurs dans le coin je crois)[/li]
[li]Perl : Catalyst[/li]
[li]ruby : Rails[/li][/ul]

Ils ont tous les même caractéristiques. Il définissent une arborescence standard pour définir une place pour chaque chose (les modèle, les vues et le(s) controleur(s), les données statiques, etc), un ORM pour gérer la base de données via un modèle et un moteur de template pour construire ces vues. Ils viennent aussi avec des outils pour créer automatiquement l’arborescence et par exemple le modèle de manière interactive. Ils sont réputés un peu long à prendre en main, d’où pour chaque langage la création de framework plus petits, plus simples et plus léger ou qui utilise des technologies ou des concepts plus récent(non je ne les listerais pas).

En entreprise on parle surtout des quatre gros dont j’ai déjà parlé.

Ensuite tu as toute liberté pour faire interfaces graphiques que tu veux, le modèle de base de données que tu veut etc. Ça sert principalement à gagner en productivité et en maintenabilité (tu utilise de facto tout un tas de bonnes pratiques, par exemple avec un bon ORM tu te protège des injections SQL).

Je ne peux qu’approuver le post ci-dessus.

Pour le Java, tu aurais aussi Spring. Maintenant, c’est un framework assez lourd (comme d’autres), et donc pour qu’il soit rentable il faut un gros projet.
Pour le PHP, tu as des frameworks plus légers il me semble que symfony (qui reste un choix de roi), cake PHP peut-être ?

Bref, je ne vais pas paraphraser MisterFreez, généralement les frameworks c’est bien, mais ça demande un peu d’investissement (de plus en plus rentabilisé au fur et à mesure que le projet grandit).

Moi j’aime beaucoup l’ensemble JSF/EJB/hibernate (mais là on parle de projets lourds, très lourd on peut retirer les EJB pour rendre un projets un peu plus petit), mais j’ai jamais essayé Srping (ni GWT d’ailleurs).

Il parait que Zend est pas mal non plus, je ne saurais dire ce qui est le mieux ou pas ([size=50]sachant que sur un langage pourri il n’y a pas grand chose à attendre de toute manière (note : relire ma signature)[/size]).

Merci à vous deux pour ces conseils!

J’ai fait un tour sur le web et les avis sont partagés entre Symfony et ZF… Je retiens un post disant, en substance, que Symfony était plutôt destiné aux débutants tandis que ZF (de part sa plus grande liberté/souplesse) était, quant à lui, destiné aux développeurs aguerris.

C’est donc vers Symfony que je vais me tourner.

@MisterFreez: j’adore tes petites phrases entre parenthèses :smiley: . Mais, dis moi, pourquoi cette “haine” du PHP? C’est typique des dev Java? Je dis ça parce que mon prof de JS (qui est programmeur Java à la base) a le PHP en horreur et ne manque jamais de le faire savoir. Pour ma part, c’est le seul que je connais (et encore, connaître est un bien grand mot) mis à part le Pascal et un peu de C.

Le PHP n’a pas de typage ou du moins il n’en a pas eu pendant longtemps. Il te sort jamais une erreur mais a un comportement difficilement compréhensible dans tout un tas de cas. Il n’est pas déclaratif, je trouve ça problématique (même si d’autres langages qui ne le font pas sont tout de même un peu meilleur comme python). La syntaxe ne me plaît pas plus que ça. J’ai vu des API qui sont moches à en crever : tu balance une requête à MySQL et il te renvoie un tableau et une map en même temps. Comment fait-il ? Simple, il te sort un tableau avec les indices en chiffre pour la partie tableau et les indices en chaine de caractères pour la map du coup tu peut pas te servir simplement for_each par exemple.

Le point le plus important c’est que je ne l’aime pas.

Le prochain qui m’insulte je le banni à vie ! (c’est de l’humour évidement je n’utiliserais mes pouvoir de modo en tant que membre).
Mes langages de prédilections sont le C++ et le perl (oui PHP est issu du perl mais en moins bien).

Les trolls sur les langages sont ce qu’il y a de plus ancestral et font couler bien plus d’encre que n’importe quel autre troll (ça n’empêche pas que dire du mal de PHP pour finalement faire du JS c’est l’hôpital qui se fout de la charité).

Note que les critiques que je fais sur les langages sont très subjectives. Chacun apprécie son langage, c’est bien pour cela qu’il y en a autant et qu’il y en a toujours qui se crée. Rien que pour ce mois-ci, j’ai découvert 2 nouveaux langages Dart créé par google pour remplacer JS (tu peut en parler à ton prof ça risque d’être drôle) et Xtends par eclipse pour créer une sorte de Java++ (un Groovy simplifié). Si tu traine sur LinuxFR tu pourras voir que chaque fois que ça parle de langage ça discute beaucoup et ça parle généralement de sureté de type de syntaxe C et de théorie des langages.

Pour compléter un peu ce qui a été dit, on discerne aujourd’hui généralement “deux” types de framework : les “fullstack” et les “micro-framework”.

Ceux qu’on nomme “fullstack” fournissent tout les composants nécessaires (ORM, moteur de template…) de manière assez intégré. On pourrait citer Django, Rails, Symfony…
Avantages : la documentation est généralement centralisée et l’intégration des composants entre eux permet d’être plus productif dans le développement de fonctionnalités (avec Rails, avec son principe “Convention over Configuration”, du comportement sera créé automatiquement sans avoir à écrire beaucoup de code, en suivant les conventions de nommage des fichiers et variables par exemple. Django lui propose la génération aisée d’une interface d’administration complète en écrivant là aussi peu de code).
Désavantages : si on a des besoins un peu plus spécifiques (qui peuvent apparaître avec le temps), il est parfois difficile de sortir du chemin tracé par le framework. Il est notamment difficile de changer certains composants au sein du framework (changer d’ORM dans Django ne permettra plus de profiter de la génération automatique de l’interface d’administration, etc).

Enfin les “microframework” comme Sinatra en Ruby, Flasks en Python (pour ne citer qu’eux, ils sont légions). Eux fournissent peu de composants par défaut, ou si c’est le cas, en changer ne pose généralement aucun problème. De manière générale on pourrait dire qu’ils offrent plus de souplesse, mais moins de fonctionnalités magiques que peuvent proposer les “fullstack”.
Niquel pour des besoins spécifiques, ou pour éviter de sortir l’artillerie lourde pour une petite application Web, etc.
Un framework qui sort un peu du lot même si je le rapprocherai des “microframework”, c’est Pyramid, où chaque composant est interchangeable (aucun ORM d’imposé, aucun moteur de template… bien que certaines combinaisons de composants sont proposées par défaut). Je ne rentrerai pas dans les détails.
Avantages : ultra-souple, développement très rapide d’un “HelloWorld” (c’est un sport national chez les “microframework” :smiley:).
Désavantages : intégration moins poussée, pas de comportement magique (on reste assez explicite sur ce qu’on veut faire), et documentation éparpillée (l’ORM, moteur de template, validateur de formulaires… vont être des projets sans lien entre eux et auront leur propre doc’).

Tu comprendras le jour où tu goûteras à d’autres langages. À ce moment tu diras “le PHP, plus jamais !” :stuck_out_tongue: Disons que la bibliothèque standard n’a aucune cohérence (rien que le nom des fonctions c’est du délire), et le comportement parfois difficile à cerner.

Et donc si je veux rendre mon site dynamique, quels alternatives proposeriez vous au php??

python ou ruby principalement

Je supporte plutôt mal les technos web (on peut cracher tant qu’on veut sur PHP, et avec raison qui plus est, mais en fait je le trouve très représentatif de l’ensemble de la pile web), mais j’apprécie assez un serveur Hunchentoot (Common Lisp) derrière nginx (qui lui va s’occuper des fichiers statiques). Avec SBCL c’est assez performant (process persistant, compilation AOT) et surtout on dispose de toute la puissance du meilleur langage jamais inventé. :mrgreen:
Seul point négatif (et de taille) : faut toujours produire du HTML/CSS (pour le JS heureusement y’a Parenscript). :eusa-whistle:

[size=65]Ah, vous dites qu’on n’est pas vendredi ?..[/size]

Tu cites Python et Ruby, tu penses à l’utilisation de Framework comme Django ou RoR pour dynamiser un site web, c’est ça??

Question complètement conne : on peut coder en php une page web sans Framework avec un éditeur de texte (au hasard Vim :whistle: ) et enregistrer en php que l’on inclura dans un fichier html

Mais est il possible d’utiliser Python ou Ruby pour coder des pages web a fortiori dynamique sans passer par un Framework??

J’espère avoir été assez claire et merci d’avance pour ton indulgence si tu estimes que c’est complètement crétin :mrgreen:

[quote=“M3t4linux”]on peut coder en php une page web sans Framework avec un éditeur de texte (au hasard Vim :whistle: ) et enregistrer en php[/quote]Oui.

[quote=“M3t4linux”]que l’on inclura dans un fichier html[/quote]Non, à partir du moment où tu veux faire du PHP, c’est PHP qui prend tout en charge.

Heureusement il est construit de telle manière que tu puisses émettre des gros blocs de HTML directement, avec juste des petits bouts de PHP par-ci par-là :

[code]

<?php echo $titre_de_la_page; ?> ...[/code] Mais ça reste un fichier .php (à moins que tu ne tripatouilles tes Handlers pour que PHP prenne en charge les .html, auquel cas c'est juste une modification cosmétique de l'extension du fichier car c'est toujours l'interpréteur PHP qui gère ça au final).

Les pages web c’est juste du texte, la plupart (tous ?) des langages se contentent de faire un “print / echo / …” pour envoyer le HTML au client, comme ils le feraient s’ils tournaient dans un terminal (à quelques différences près concernant la gestion des en-têtes HTTP, mais c’est un détail). Donc oui, les frameworks sont totalement optionnels, c’est juste une question pratique (au même titre qu’une lib d’interface graphique comme GTK ou Qt est optionnelle, il est tout à fait possible de programmer directement pour X sans couche intermédiaire – pour être honnête il est tout de même beaucoup plus facile de faire un site viable en PHP/Python/Ruby sans framework, que de faire une appli X viable sans toolkit d’interface utilisateur, la difficulté est incomparable, mais la comparaison reste valable dans le principe).

Ce bout de PHP produit une “page” tout à fait valide, et n’a besoin d’absolument aucun framework pour fonctionner :

<?php echo "Hello world!";

Ok donc ma question est pas si crétine que ça en fait :115

Bon si on décide décide d’utiliser python, et sans Framework, où placer une print("Hello world!")

Pour ce qui est de la manière de générer le code HTML Java est un bon exemple.

Il possède des servlets qui sont de simples classes qui implémentent les méthodes doPost et doGet. Dans ces méthodes on écris sur l’écran de l’utilisateur comme on écrirais sur le terminal avec des println(). C’est de loin ce qu’il y a de moins agréable.

Ensuite il y a les JSP qui permettent d’avoir des fichiers XML qui ont une gueule d’HTML à la différence qu’ils embarquent des bouts de code, comme le fait PHP. Une JSP est compilée de manière transparente vers une servlet, ce qui permet d’avoir des implémentation simple de serveur web Java (qu’on appel conteneur de servlet).

Enfin (si on reste dans les standards Java) il y a JSF, une sorte de HTML++ où l’on peut mêler du HTML avec des composants graphiques sophistiqués (par exemple une balise qui va permettre de créer un calendrier pour que l’utilisateur choisisse une date) qui sont manipuler directement par des classes Java (qui donc ne s’occupent pas de générer du HTML, du Javascript ou autre). A mon sens c’est vers ça que l’on est entrain de se diriger, c’est à dire vers une abstraction du de la pile cliente et l’écrire d’une manière ou d’une autre via un framework. C’est aussi ce que fait GWT avec du Java, du Java et uniquement du Java pour faire des interfaces web (on ne se soucie pas de savoir comment créer l’interface en HTML/CSS/JS).

\begin{signature}
J’aime vraiment pas Java. Mais il faut reconnaitre que je n’ai jamais vu d’exemples de ce type dans d’autres langages (sauf pyjama pour python mais c’est très peu utiliser). Ça ne viens pas du langage mais du travail qui est fait avec. De ce que j’en ai vu tout les framework qu’ils soient full-stack, microframework, quelque soit le langage, ils utilisent un moteur de template relativement bateau face à JSF ou GWT. Il paraît que C# a aussi un équivalent à JSF.
\end{signature}

[quote=“M3t4linux”]Ok donc ma question est pas si crétine que ça en fait :115

Bon si on décide décide d’utiliser python, et sans Framework, où placer une print("Hello world!")[/quote]

Réponse courte : ce n’est pas si simple :slightly_smiling:

On pourrait le faire en Python (et c’était plus ou moins ainsi au début je crois bien), mais c’est désormais une méthode non recommandée.
À la place, on crée plutôt une application prenant en entrée la requête HTTP, et donne en sortie le résultat HTML. Faut vraiment le voir comme un “tout” et non comme une application composée de plusieurs petits scripts qu’on pourra requêter directement depuis l’URL à la façon PHP standard.

Pour servir cette application, un standard Python a été créé, nommé WSGI (Web Server Gateway Interface), la majorité des framework Web Python sont conforme WSGI.
Une telle application est donc appelée application WSGI, et pour servir celle-ci il faut que le serveur Web soit compatible WSGI (comme c’est un standard, beaucoup le sont, notamment Apache HTTPD avec mod_wsgi).

En gros, le serveur Web envoie la requête HTTP à l’application WSGI, celle-ci l’analyse (avec un système de routage par exemple : on va lié l’URL “/contact” à la méthode “contact_form()”) et retourne la réponse adéquate.
Dans Apache on mettrait qqchose de ce style :

WSGIScriptAlias / /path/to/my_site/my_site.wsgi

my_site.wsgi étant un script Python instanciant l’application WSGI proprement dite (consulter la façon de faire selon le framework utilisé).

L’avantage de ce standard, c’est qu’on peut y glisser des middleware WSGI entre le serveur Web et l’application. Ou encore, avoir plusieurs applications WSGI (pouvant être développée avec des framework différents) communiquant entre elles : tu peux avoir un blog + un site e-commerce + une appli d’agenda déléguant l’authentification des utilisateurs auprès d’une autre application WSGI gérant la base des utilisateurs.

@MisterFreez : j’ai eu l’occasion de tester GWT, c’est vrai que c’est agréable de développer son appli Web comme une appli Desktop, sans mettre trop le nez dans du HTML/CSS…

Bon, apparemment il est plus facile de coder du php si l’on veut se passer d’un Framework, càd Vim

Non le wsgi n’a rien d’obligatoire. Il suffit de voir tornado pour voir que python permet de faire une appli web sans se prendre la tête avec un serveur web par exemple.

Quel est le rapport entre Vim et un framework ? Je n’utilise que Vim personnellement.

Je voulais dire qu’il est plus facile de coder du php (avec vim) et donc sans FW que du python sans FW

C’est donc possible avec Apache? Il faut installer un plugin qui prend en charge Python??

Désolé pour ces questions mais la plupart des tutos sur le net font mention du php quand il s’agit de dynamiser un site web :12

J’ai comme l’impression que tu confonds des choses là…
Framework = ensemble de librairies (fonctions) mises à la disposition du programmeur pour éviter qu’il ait à réinventer la roue.
Vim = éditeur de texte.
Rien à voir… :mrgreen: Tu peux très bien coder avec un framework tout en utilisant l’éditeur de texte de ton choix.

Tu mélangerais pas framework et IDE (Integrated Development Environment) par hasard ?