JeuWeb - Crée ton jeu par navigateur

Version complète : Que peut apporter une classe MySQL ?
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3
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
Bon, comme le débat est - comme les autres 2 - 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($requete06)) === '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 34

~L~
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 :
$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 :
$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 :
$boite=$db->extract_ladata("SELECT `boite` FROM `geo_forme` WHERE `id`='12'");
echo 
$boite
Au lieu de
Code 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.
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.
Bon, c'est certain qu'il y a des choses possiblement superficielle, telle que :
Code 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 ! 10
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 16
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 ! 16
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.
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
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
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~
Pages : 1 2 3
URLs de référence