JeuWeb - Crée ton jeu par navigateur
Que peut apporter une classe MySQL ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Que peut apporter une classe MySQL ? (/showthread.php?tid=2013)

Pages : 1 2 3


Que peut apporter une classe MySQL ? - Sephi-Chan - 14-11-2007

Salut à tous,

J'aimerai discuter de l'intérêt des classes pour utiliser MySQL. Vous noterez que je parle bien des classes pour MySQL, et pas SQL de manière générale. Je ne veux donc pas parler des classes d'abstractions de SGBD qui sont à mon sens inutiles à un jeu par navigateur.

Quelles sont donc les fonctionnalités que l'on peut attendre de telles classes ?


Sephi-Chan


RE: Que peut apporter une classe MySQL ? - Plume - 14-11-2007

Bon, comme le débat est - comme les autres Smile - parti de nos conversations, je vais essayer d'exposer mon point de vue, ou du moins ce que j'arrive à me rappeler des intérets.

Note :
Evidemment, dans ma classe, y a de l'abstraction parce qu'à l'origine je devais prévoir les changements de SGBD .. Mais bon, j'vais pas pouvoir débattre là dessus, c'est sortir du sujet.

Selon moi, d'une première approche, ça simplifie plusieurs méthodes. Un gain de temps dans le développement - après que la classe ait été développé, bien sûr. Et tu l'as bien vu de toute façon et tu es d'accord avec moi. Après avoir fait :
Code PHP :
<?php
public function executer_requete( $requete )
{
$debut = microtime(true);
$query = @mysql_query( $requete );
$this->tempsExecution +=microtime(true) - $debut;

$this->nbreRequetes++;

if(
$query === FALSE )
{
$texte_requete = 'V&eacute;rifiez la requ&ecirc;te : <strong>'.$requete.'</strong><br />'."\n";
$texte_requete .= 'Erreur SQL : <strong>'.mysql_error().'</strong><br />'."\n";
$texte_requete .= 'Num&eacute;ro de l\'erreur : <strong>'.mysql_errno().'</strong><br />'."\n";
$this->erreurSQL( $texte_requete );

return
false;
}

if (
strtolower(substr($requete, 0, 6)) === 'select' )
return new
MySQLResultat( $query );
else
return
$this->enregistrements_affectes();
}
?>
Tu préfères encore faire ça :
Code PHP :
<?php $ressource = $objetSQL -> executer_requete( $requete ) ; ?>
Plutôt que devoir retaper tout le bordel précédent.

J'ai aussi grâce à la classe créé des méthodes - un peu étrange après coup - mais utile comme parse_params() ou autre.

A ce moment là, j'suis parti du fait que quelques soit le SGBD, même s'il ne change pas, c'est un objet, donc tout le reste doit rentrer dans cette optique.

A plus tard quand la mémoire me reviendra ^^

~L~


RE: Que peut apporter une classe MySQL ? - Zamentur - 14-11-2007

Moi je trouve çà super utile!
J'en ai fais une pendant la beta de Ragol, aujourd'hui je le regrette pas

Comme je l'expliquer sur le topic "[POO] Classe InterfaceSQL : Conseillez moi" , j'ai mis en place une methode extract_one qui permet de recuperer en une ligne la premiere ligne d'une requete SQL

Code PHP :
<?php 
$forme
=$db->extract_one("SELECT `boite`, `cube`, `sphere` FROM `geo_forme` WHERE `id`='12'");
echo
$forme['boite'];
echo
$forme['cube'];
Au lieu de
Code PHP :
<?php 
$req
=mysql_query("SELECT `boite`, `cube`, `sphere` FROM `geo_forme` WHERE `id`='12'") or die ('Erreur :'.mysql_error());
$forme=mysql_fetch_array($req);
echo
$forme['boite'];
echo
$forme['cube'];

Plus tard dans le meme esprit j'ai mis au point d'autre trucs du meme style comme extract_ladata
Code PHP :
<?php 
$boite
=$db->extract_ladata("SELECT `boite` FROM `geo_forme` WHERE `id`='12'");
echo
$boite;
Au lieu de
Code PHP :
<?php 
$req
=mysql_query("SELECT `boite` FROM `geo_forme` WHERE `id`='12'") or die ('Erreur :'.mysql_error());
$forme=mysql_fetch_assoc($req);
$boite=$forme[0];
echo
$boite;

Et puis j'y ai mis aussi une fonction d'erreur personnaliser relier directement à ma fonction de gestion d'erreur ce qui me permet d'avoir des statistiques sur les erreurs et ainsi corriger les erreurs les plus recurentes...

Et bien entendue là c'est qu'un petit exemple, mais on peut aussi faire des fonction qui serve à la selection à la mise à jour etc... Et y inclure des option de securité, comme par exemple vérifié qu'il n'y a pas de sql crossing dans les variables
Et çà peut se faire 2 ans après que la classe à été créé et utilisé, car il suffit de modifier les methodes et non d'aller dans tout les bouts de code faire des modifs...

Voilà déjà à mon sens quelques argument justifiant l'emploi d'une tel classe.


RE: Que peut apporter une classe MySQL ? - Loetheri - 14-11-2007

La définition de ta fonction extract_one a, je suppose, un LIMIT caché ?

Je reste très sceptique par rapport à l'utilisation que vous faites d'une telle classe. Quand je vois les classes de LeX, je trouve qu'il s'agit d'une sur-couche assez ... inutile. Maintenant, je sais que cela arrive qu'on change de base de données mais cela arrive-t-il si souvent ? (naholyr a parlé de ce cas lors de la discussion sur les FrameWorks ... et je crois que cela lui était arrivé une fois).
Que va-tu gagner ? Quoi qu'il en soit, tu devras changer les classes que tu utilises. Donc d'office faire un trouver/changer. Tu en feras un et moi 6 environ. J'irai même peut-être plus vite si j'utilise un bon outil.

Pour moi, une classe/série de fonctions de BdD est utile si tu implémentes des fonctionnalités te permettant réellement d'aller plus vite, d'éviter de faire des trucs rébarbatifs.

Cela dit, pour ta fonction d'erreur, c'est bien tant que tu développes mais elle n'est pas une fonction de production.


RE: Que peut apporter une classe MySQL ? - Plume - 14-11-2007

Bon, c'est certain qu'il y a des choses possiblement superficielle, telle que :
Code PHP :
<?php 
public function enregistrements_affectes()
{
return
mysql_affected_rows( $this->connexion );
}
Mais je justifie ce genre de méthode par le fait qu'à partir du moment où je considère MySQL 'comme un objet', tout y passe.

~L~

[EDIT]
Citation :Loetheri
Membre
Messages : 666
Mouerf ! Tongue


RE: Que peut apporter une classe MySQL ? - naholyr - 14-11-2007

Si on utilise le design pattern «factory» il n'y a absolument pas besoin de changer de classe.

L'utilité d'utiliser la POO est toujours la même : si on compte maintenir une application plusieurs années, et/ou réutiliser du code dans plusieurs projets différents, utiliser des couches d'abstraction sous forme de classes me paraissent être une nécessité :
- pour l'organisation du code (ne serait-ce qu'en considérant une classe comme un «namespace»)
- pour l'évolutivité des classes grâce à l'héritage et aux design patterns les plus communs (factory et singleton)
- pour avoir une API claire (et la doc qui va avec coulera toute seule)

Si ces arguments ne te parlent pas, je pense que la meilleure chose à faire est de... laisser faire Lex, il a les bonnes cartes en main Wink
En revanche la vraie question à se poser est pourquoi développer sa propre couche d'abstraction alors qu'il en existe des déjà faites qui ont fait leurs preuves en terme de performances, de robustesse, etc... ?
En POO, le maitre mot est réutilisabilité, réinventer la roue est déjà une erreur.

Utiliser une classe pour l'accès à la BDD, oui ! L'écrire soi-même, non ! Wink


RE: Que peut apporter une classe MySQL ? - Shiwa - 14-11-2007

Personnellement j'ai repris une classe toute faite trouvée sur je ne sais plus quel site.
Ce que j'aime beaucoup, c'est qu'elle contient dans un fichier à part les informations de connexion, je n'ai donc pas de mysql_connect qui trainent partout. Double avantage : les mots de passe/login sont mis à part dans un répertoire protégé et lorsque je transfère des fichiers testés localement avec wamp vers le serveur, je n'ai pas à les modifier partout.


RE: Que peut apporter une classe MySQL ? - Sephi-Chan - 14-11-2007

Shiwa a écrit :Personnellement j'ai repris une classe toute faite trouvée sur je ne sais plus quel site.
Ce que j'aime beaucoup, c'est qu'elle contient dans un fichier à part les informations de connexion, je n'ai donc pas de mysql_connect qui trainent partout. Double avantage : les mots de passe/login sont mis à part dans un répertoire protégé et lorsque je transfère des fichiers testés localement avec wamp vers le serveur, je n'ai pas à les modifier partout.
C'est là qu'on apprécie l'utilisation d'une page appelante du genre index.php?p=mapage.

D'après vos interventions, il n'y a pas d'avantage à utiliser une classe...


Sephi-Chan


RE: Que peut apporter une classe MySQL ? - Sephi-Chan - 14-11-2007

Oui, c'est le seul avantage que j'ai pu trouver. C'est bien une simple question d'organisation et non d'utilité "technique".


Sephi-Chan


RE: Que peut apporter une classe MySQL ? - Plume - 14-11-2007

Citation :En revanche la vraie question à se poser est pourquoi développer sa propre couche d'abstraction alors qu'il en existe des déjà faites qui ont fait leurs preuves en terme de performances, de robustesse, etc... ?
En POO, le maitre mot est réutilisabilité, réinventer la roue est déjà une erreur.

Comme vu avec Sephi en privé, j'préfère encore faire mon boulot que je réutiliserais à partir du moment où l'existant est bien trop lourd pour ce que j'utilise ..

~L~