|
Centralisation et séparation des données
|
|
Table des matières
Centralisation et séparation des donnéesIntroductionL'objectif de ce tutorial est d’éviter l'erreur classique d'insérer des données dans du traitement. Il montre à l'aide d'un exemple les problèmes engendrés par cette erreur et donne quelques solutions. Pourquoi centraliser les données?Un jeu par navigateur représente souvent une quantité de code importante. Il est souvent nécessaire de faire des mises à jour durant plusieurs années. Si l'on ne pense pas à centraliser les données du jeu, il arrive un moment où faire une mise à jour est un risque, car on oublie tous les endroits où une donnée est inscrite dans le code!
Exemple : On a donc entre autre:
<?php //... $sql="INSERT INTO `war_perso` ( `id` , `nom` , `xp` , `ville` , `arme` , `energie` , `Vision`, `force`, `potion`) VALUES ('$id', '$nom', '0', '$ville', '', '1', '10', '0.1', '0')"; //... echo 'Votre perso est crée'; //... ?> Attention: Une des colonnes de la table war_perso est nommé “force”, force est un mot-clef réservé à mysql, c'est pourquoi il est impératif de l'entourer de ` .
<?php //... $sql="UPDATE `war_perso` SET `energie`='1', `vision`='10', `force`='0.1' WHERE `id`='$id'"; //... $historique='Votre perso perd son bonus de potion éphémère'; //... ?>
<?php //... $carac_basique=array( 'energie' => 1, 'vision' => 10, 'force' => 0.1 ); $ajout=$carac_basique[$potion_type]*mt_rand(50,100)/100; $sql="UPDATE `war_perso` SET `$potion_type`=`$potion_type`+'$ajout' WHERE `id`='$id'"; //... echo 'Gloup Gloup'; //... ?>
Tout çà en gardant en tête que nous avons des dizaines ou centaines de scripts et des milliers de lignes de code. De même si vous vous rendez compte que vous avez fait une faute d'orthographe, ou que vous vouliez traduire votre jeu pour ouvrir le jeu à d'autre pays, ça prendra du temps ! La solution : séparer et centraliser les donnéesIl y a plusieurs méthodes pour le faire ce qui importe c'est d'y penser et de le faire. Voici quelques approches : Stocker dans des fichiers à part
Les données peuvent être enregistrées sous différents formats (php, xml, javascript, txt etc…). Voici donc notre exemple, avec des données centralisées :
<?php //... $cb= array( //... 'energie' =>1, 'vision' =>10, 'force' =>0.1, 'min_potion' =>0.5 ); //... ?>
<?php //... $textes= array( 'perso_creer' =>'Votre perso, %s, est crée!', 'perte_bonus' =>'Votre perso, %s, perd son bonus de potion éphémère', 'utilise_potion'=>'Gloup Gloup' ); //... ?>
<?php //... require_once($file_lang); require_once('var_carac_basique.php'); //... $energie=$cb['energie']; $vision=$cb['vision']; $force=$cb['force']; $sql="INSERT INTO `war_perso` ( `id` , `nom` , `xp` , `ville` , `arme` , `energie` , `Vision`, `force`) VALUES ('$id', '$nom', '0', '$ville', '', '$energie', '$vision', '$force')"; //... echo sprintf($textes['perso_creer'],$nom); //... ?>
<?php //... require_once($file_lang); require_once('var_carac_basique.php'); //... $energie=$cb['energie']; $vision=$cb['vision']; $force=$cb['force']; $sql="UPDATE `war_perso` SET `energie`='$energie', `vision`='$vision', `force`='$force' WHERE `id`='$id'"; //... echo sprintf($textes['perte_bonus'],$nom); //... ?>
<?php //... require_once($file_lang); require_once('var_carac_basique.php'); //... $min_potion=$cb['min_potion']; $precision=100; $ajout=$cb[$potion_type]*mt_rand(round($min_potion*$precision),$precision)/$precision; $sql="UPDATE `war_perso` SET `$potion_type`=`$potion_type`+'$ajout' WHERE `id`='$id'"; //... echo sprintf($textes['utilise_potion']); //... ?> Stocker toutes les données dans une table d'une base de données
Une autre solution est de tout mettre dans une table, cela dit attention l'accès aux bases de données est assez long ! Faire un peu des 2 précédents
Il peut être judicieux de faire un mélange des 2 effectivement. L'idée c'est d'éviter d'avoir des fichiers énormes et donc d'utiliser des ressources inutilement. Pour ce faire on met dans la base de données les données occasionnelles et dans les fichiers les données très courantes. Il y a sûrement d'autre façonOui là je vous ai montré quelques façons que j'ai utilisées maintenant il y a sûrement d'autres approches pour le faire. ConclusionVoilà le but de ce tutorial était surtout d'attirer l'attention sur le problème de redondance des données dans les scripts. J'espère que maintenant vous essayerez de mettre en place quelques choses afin d'éviter cette erreur récurrente ! NB: Le problème est identique dans les bases de données, il y a d'ailleurs un tutorial à ce sujet. orthographe — pascaltje 2007/12/11 16:48 Question : il faudrait modifier le nom du champ 'force', qui est un mot clé réservé de MySQL, non ? cf le tuto “bonnes pratiques SQL” Zamentur : En fait l'exemple fonctionne parce qu'il y a utilisation de `` , mais c'est vrai qu'on devrait peut etre changer çà. LexLxUs : Si tu tiens à conserver ce nom, je pense que dans ce cas, il faut au moins un avertissement :) — Adrien Giboire 2007/12/11 19:20 Zamentur : c'est fait. |
|
tutoprog/centraliser_les_donnees.txt · Dernière modification: 2011/04/03 14:06 (édition externe)
|