Bonjour,
Je développe depuis un demi-million d'années en PHP (3, 4, 5), ce qui m'a donné -certainement- pas mal de mauvaises habitudes. Voici ma manière de travailler, en quelques mots :
- un fichier de fonctions "génériques", réutilisables telles que. Par exemple des conversion de format de date, des tests de format de chaine, etc. Je me suis imposé strictement une rétrocompatibilité sur ce fichier
- un fichier de fonctions spécifiques au site concerné
- un fichier centralisant les "actions", c'est à dire ce qui doit être fait lorsque, par exemple, un formulaire est rempli. Bien entendu celui ci est spécifique également
Vous noterez dans tout cela, point de POO, mais une organisation à la mode "ma gueule"
Depuis quelques temps, on m'assène une vérité première qui dit (je résume) que tout ce qui l'es pas POO est tout pourri et tout vieux. Alors comme je ne veux pas mourir idiot, je m'y colle. Je n'ai pas de problème particulier de syntaxe, et je dirais que fonctionnellement j'obtiens ce que je veux. Pour autant, je suis face à un important problème qui me fait penser que soit je n'ai pas tout compris au concept, soit qu'on m'aurait menti sur le tout pourri de mes vieilles habitudes.
Voici un exemple concret. Je veux obtenir un bête tableau qui liste les membres de mon site, la date de leur dernière visite, et le nombre de messages postés dans le forum. Je prends cet exemple exprès, car les 3 données sont dans 3 tables différentes.
Méthode avant :
Méthode POO :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $q=mysql_query("Ma requete qui va bien avec jointure qui vont bien pour récupérer en une seule fois toutes les infos de tous les membres"); while ($r=mysql_fetch_object($q)) { // ma ligne de tableau, avec pseudo, date dernière visite, nombre de messages forum }
D'une part ceci :
Et d'autre part ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class Membre { function getInfos($idmembre) { // requete qui me récupère les infos de base pour le membre passé en argument } function getPseudo() { // ici pas de requête, je ne fais que récupérer le pseudo obtenu par getInfos } function getDerniereVisite() { // requete qui me récupère la date de dernière visite } function getNbMessages() { // requete qui me récupère le nombre de messages postés } }
Bon, c'est un code schématique, bien entendu, pas le réel. Juste pour l'exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $q=mysql_query("Requete pour récupérer les id des membres qui m'intéressent"); while ($r=mysql_fetch_object($q)) { $m=new Membre; $m->getInfos($r->id); echo $m->getPseudo(); echo $m->getDerniereVisite(); echo $m->getNbMessages(); }
En procédant de cette manière, il arrive ce qui devait arriver : c'est lent, très lent... Et en fait c'est un peu logique : plutôt qu'une requête complexe, je fais faire au serveur une requête simple puis 3 requêtes simples par membre.
Bien sûr, dans de nombreux cas je n'affiche que les infos d'un seul membre, au pire deux, donc ce n'est pas super impactant. Mais il suffit que je tombe dans des cas du type :
- liste des membres avec telle ou telle info
- thread d'un forum, avec pour chaque post affichage de quelques infos sur le membre
Pour que cela tourne au vinaigre.
Donc voici mon problème : où merdé-je ? J'ai bien imaginé faire une autre classe qui possèderait des méthodes spécifiques pour récupérer les données dans tous les cas tordus, mais à la fin, je n'ai vraiment pas le sentiment de faire quelque chose ni de très propre, ni de très maintenable, en tout cas pas davantage que ma méthode de papy.
Merci à à toutes celles et tous ceux qui pourront éclairer ma lanterne sourde.
Partager