Bonjour,
Ce message est long, très long. J'y raconte un peu ma vie de programmeur, mais il pose énormément de questions, des questions auquel je ne sais pas répondre. J'espère que vous trouverez le temps de le lire et d'y répondre. Merci à tous ceux qui prendront de lire et de participer.
J'ai l'impression de créer une énième discussion, pourtant, après avoir lu et expérimenter tout un tas de choses, des questions persistent. Surement parce que tout projet est en quelque sorte "unique".
J'utilise PHP depuis maintenant une petite dizaine d'années, j'ai du commencer mes premier bouts de scripts quand j'avais 14/15 ans. J'ai appris en autodidacte et je crois qu'aujourd'hui, j'arrive à faire ce que je veux en PHP. J'ai créé mon propre CMS, mon propre moteur de forum... plein de choses qui me facilitent mon quotidien. J'ai même créé mon jeu de rôle en ligne par navigateur (4e bêta test en cours de réécriture).
Mais... il me manque ce quelque chose qui fait que mon code n'est pas "professionnel". Ca vient de ma façon de concevoir mes classes, mes héritages, tout ça tout ça. Je vois le moment où mon code manque d'optimisation.
Je me suis très vite tourné vers les moteurs de template à l'époque. D'abord mon mien, puis ensuite, celui de PHPBB et enfin, le Smarty que j'utilise maintenant depuis 2/3 ans.
Les arguments du moteur de templates font qu'il parait à un moment "logique" d'en utiliser : séparer le HTML du PHP. Ne pas trouver de echo '<a href.....>'; C'est super. L'autre principal argument au delà de la clarté du code, c'est aussi le fait que n'importe quel webdesigner ayant trois notions et demi en HTML/CSS pourra appliquer tout un tas de modification sur le design sans avoir à mettre son nez dans le PHP.
Sauf, qu'au bout d'un moment, à faire du smarty très poussé, un fichier de template peut très vite être complexe.
Maintenant, parlons framework... Je n'ai jamais travaillé avec un framework. J'ai par contre lu énormément de choses sur eux et ait fait un tuto d'initialisation à Symfony.
J'ai toujours programmé de la même façon, en utilisant ma vision du "MVC"... Je pense d'ailleurs que cette vision (qui est en fait seulement "ce que j'en ai compris"), c'est qu'une application est composée :
- de modèle : qui sont pour moi ma bibliothèque de classes qui pour un objet on trouvera le CRUD habituel
- de vues : qui ont souvent été géré par des moteurs de template comme dit plus haut
- des controllers, qui sont pour moi "la page appelée" dans laquelle je gérais mon code. Appel d'une fonction de vérification d'un formulaire (présente dans la classe formulaire), instanciation des différents objets, appel de la vue...
Alors, malgré ce côté autodidacte qui n'a pas fait de grandes écoles d'ingénieurs, j'me dis que je ne dois pas être trop loin de la vérité et qu'après tout pour un passionné, j'ai ps trop à rougir devant les codes des "grands pros".
Mais j'ai du mal à concevoir qu'il existe "un outil que tout le monde semble encenser" sans pouvoir me l'approprier. C'est con à dire, mais par exemple, je suis un fan de Star Wars. J'aurais hyper mal à mon petit coeur si demain une fillette de 8ans venait me spoiler l'histoire du "Pouvoir de la Force II" qui est sorti la semaine dernière, tout ça parce que je n'ai pas eu le temps de me poser dessus (et de l'acheter) !
Si j'ai jamais sauté sur les Framework PHP, c'est souvent par manque de temps. Le besoin de faire ce choix de framework me semble infiniment dur, alors que pour l'utilisation d'un Framework Javascript, je n'ai pas hésité une seule seconde. C'est mootools depuis le début, parfois le fait du JQuery... Mais au final, les Framework javascript ne changent pas ma perception du développement web. Ces framework JS sont en gros des librairies de fonctions qui permettent de faciliter certaines actions, la création d'effet... Au final, ça n'a un impact que du côté client.
Sans framework, l'arborescence de mon site a souvent était celle ci :
/
-backoffice (le backend de mon application)
-libs (tous mes Models en gros, ma classe de gestion de BDD, mes helpers, le classe de smarty, les plug...)
-templates et templates_c et cache (les dossiers de smarty où on range, les vues, les vues compilées et les fichiers que nous mettons en cache)
-tous mes scripts (mes controllers) à la racine.
La profondeur maximale en général était : /templates/nom_du_templates/css/design
Je pouvais donc avoir X templates pour une même application. Tous les fichiers CSS dans le dossier CSS et les éléments du design dans le dossier du design.
Pas d'URL trop longue, monsite.com/mon_action.php et en cas de "trop de paramètres", utilisation de l'URL rewriting pour que ça ait un semblant de tronche.
J'ai toujours ensuite commencé un projet par 2 fichiers que j'appelle : settings.inc.php et config.inc.php (dernièrement renommé init.inc.php).
Le settings est un fichier de constantes, identifiants bdd, des constantes pour mes répertoires... Le fichier init quand à lui était inclus en entête de chaque page. Appel du fichier settings, création de la connexion à la BDD, initialisation de Smarty et de certains helpers que j'aurais besoin quasi non stop.
Juste que là... j'vous avouerais que j'me suis toujours auto-satisfait de cette simplicité. Et je pense que n'importe qui avec les mêmes connaissances que moi (ou des bien plus poussées) pourrait jeter un oeil dans mon application et la comprendre sans soucis.
J'allais donc recommencer à développer la bêta test de mon jeu par navigateur (la 4e version donc). Et puis, un autre jeu sur lequel je joue a été tout bonnement piraté par un crew de hackers albanais (UAH-CREW). L'entreprise qui gère le jeu a subit une attaque par une autre application (une faille sur OS Commerce) et tous les autres sites ont été affectés mais surtout le jeu (il semblerait qu'un joueur frustré ait fait une demande à cette team de hackers pour venir mettre le bordel).
D'abord, ça m'a fait rire. Je me suis dit "je suis bien content d'utiliser prestashop...". Et après je me suis dit "merde, mais prestashop et moi, on fonctionne pareil". Même librairie de templates, même système de config / settings (c'est d'ailleurs pour ça que je travaille sur cet ecommerce, parce que je le comprends parfaitement, il m'arrive même de me dire : mais oh, c'est mon code ça...")...
Et vient le moment où je me dis que prestashop n'a pas utilisé de Framework, tout a été codé comme ça... et les mecs sont allés loins. Plutôt rassurant donc de se dire qu'un framework n'est pas nécessaire à la création d'une application robuste. Je suis aussi un utilisateur de Wordpress et je n'ai pas l'impression non plus qu'un framework ait été utilisé.
Mais, je ne suis pas les mecs de Presta ou de Wordpress... Et y a des choses qu'ils font et que je ne maitrise absolument pas. Et en parcourant le web, je suis tombé sur "un article" qui m'a mis sur le cul.
J'avais la tête de l'enfant de 6ans, en stupeur devant la statuette de 1m30 de Superman... et je la voulais.
Voici l'article sur les objets dynamic en PHP...
Et là, j'me suis vraiment dit "Bordel de merde, c'est vraiment ça la POO, mais j'suis vraiment un gros NOOB"... J'ai donc parcouru tout un tas d'articles... Et j'ai ensuite découvert le Singleton.
J'y ai tout de suite trouvé l'intérêt pour une classe de gestion de base données... J'étais donc résolu à appliquer ces deux choses à mon jeu.
Et puis... j'allais me lancer, quand j'me suis posé devant mon tableau blanc. Et j'me suis dit que "tout ça" semblait exister et que c'est ce qu'on appelait un "Framework"...
J'ai donc d'abord regardé tous les différents Framework qui semblent "maintenus".*
- Symphony, j'avais testé... J'avais moyennement aimé. La ligne de commande, c'est marrant deux minutes, mais bon, j'suis pas là pour développer Dailymotion. Peut être qu'il existe plus léger. J'ai pas besoin d'un ORM incorporé déjà...
- Zend Framework : développé par ceux qui travaillent sur PHP. Forcément, ça attire. Mais là aussi, ça a l'air d'être une sacré usine...
Et j'ai tout regardé jusqu'à tomber sur : CodeIgniter...
CodeIgniter, ça m'a fait tilt. Déjà, parce que j'avais déjà entendu filer ce nom dans la communauté des développeurs Mootools. Je crois qu'ils sont quelques uns à bosser dessus.
J'ai donc lu toute la doc, parce qu'entre "Koh Lanta" et "Qui veut épouser mon fils"... la télé, elle va bien 5 minutes... Ca m'a pris 2 grosses heures. J'ai regardé les tutos... Ca m'a pris une demi heure...
Et là... en 2h30, j'étais rempli d'enthousiasme et d'un millier de question par rapport à mon jeu. Mais pas des questions sur le Framework de CI... mais sur les framework en général.
Je n'ai pas trop envie de rentrer dans la discussion du framework parfait, du plus puissants... Chacun a sa communauté, chacun a son approche, ses intérêts, ses différences. Suffit de lire quelques articles pour se dire "celui là m'ira peut être mieux"... Donc, je ne vais pas vous demander si lui est mieux que lui ^^
A) Les vues VS le moteur de template
La plupart des framework ont ce qu'on pourrait appeler leur propre moteur de template. Tous peuvent aussi virer ce moteur de template pour Smarty. Mais au final, avoir un :
OU
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <ul> {foreach from=$mes_variables item=ma_var} <li>{$ma_var.content}</li> {/foreach} </ul>
De ce que je vois :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <ul> <?php foreach ($mes_variables as $ma_var): ?> <li><?php=$ma_var['content']?></li> <?php endforeach; ?> </ul>
(a) Même nombre de ligne
(b) Ok, y a du PHP dans mon HTML. Mais le système des variables en Smarty s'en approche beaucoup hein
(c) Ca a la même gueule, le même type de "mots"
(d) Smarty va devoir parser le fichier HTML pour assigner les valeurs... la 2e version non.
Donc forcément, ça a la même gueule mais au delà de ça, Smarty est forcément plus long au chargement. Plus long de combien, je suis à peu prêt sur que pour une application normale, avec un nombre de connexion qui ne dépasse pas l'entendement... c'est de l'ordre du "vraiment pas grand chose de significatif".
De plus, Smarty me semble inclure des choses quand même supra pratique :
(a) Génération de select/option avec pré-sélection
(b) template pouvant contenir des templates (je ne sais cependant pas si on peut arriver pareil avec les vues de base)
A votre avis, je suis dans le vrai, ou pas ?
B) Framework VS développer à la main
Un framework me semble quand même "plus lourd". Chargement des config', j'ai l'impression qu'il y a facilement 10 à 15 fichiers qui se chargent pour obtenir un rendu.
Mais là encore, ça m'a l'air encore d'être assez insignifiant pour une application qui n'a pas la prétention d'être une usine...
Après, le côté sécurité. Les injections SQL et les failles XSS ne me font pas peur... Mais le fait est qu'un framework permet d'automatiser ce genre de contrôle, quand on le fait soit même... ben on est pas à l'abri d'un oubli...
Alors, le framework est-il aussi un gage de sécurité ?
C) Votre avis
Que pouvez-vous me dire vous ?
Quand penssez-vous qu'un Framework est nécessaire ou ne l'est pas ?
Que pensez-vous du couplage de Smarty avec un autre moteur de template, ou alors les moteurs de vues de base ou HTML et PHP se mélangent (comme dans mon exemple plus haut)...
Bref... Je suis preneur de conseils et de vos analyses.
Partager