15-12-2010, 12:48 PM
(Modification du message : 15-12-2010, 12:49 PM par NicoMSEvent.)
Liste des posts similaires :
[POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB
[POO] Bonne pratique n°2: ... (à venir)
Suite a ce tread : Aide dans une requetes, et surtout d'une dérive sur l'augmentation du nombre de requetes SQL qu'entrainait le passage d'une programmation procédurale vers la POO, j'ai décidé de créer un nouveau thread sur les bonnes pratiques a adopter.
Donc ce tread ci concernera la réutilisation des objets.
Comme exemple, je vais en prendre un que je connais bien, c'est a dire mon jeu
J'ai un plateau contenant des tuiles. Chaque tuile est d'un certain type (auberge, herbe, eau, foret, ...)
Je n'ai pas beaucoup de type de tuiles différentes, donc je charge tous les types en mémoire, dans un tableau que je vais appeler $type_de_tuile avec comme indice l'identifiant
Lorsque je place une tuile sur le plateau visible à l'écran (mon plateau en db fait +- 1 million de cases, et j'en affiche une vingtaine à l'écran),
-je crée une tuile d'un certain type, et là je passe en paramètre le type de tuile (objet) par référence, et non par copie (donc je n'ai en mémoire qu'un seul objet, et non des copies, ce qui permet un certain gain de mémoire).
De plus, comme mon objet "type de tuile" est déjà créé, j'économise la re-création de l'objet "type de tuile", et donc les doublons avec a nouveau des accès a la DB.
La question qui me vient à l'esprit : Aurais-je eu intéret à ne créer au vol que les type de tuile que j'utilise effectivement? (Singleton sur le type de tuile?)
Exemple d'appel (simplifié) :
ma_nouvelle_tuile=new tuile(&type_tuile,pos_x,pos_y);
De même, lorsque je place un personnage, je passe en paramètre la tuile sur laquelle il doit se placer (avec passage par référence), de manière a éviter les doublons si jamais il y a plusieurs personnages sur la même tuile.
Autre question ouverte : lorsque je fais un appel AJAX, et je sais d'avance que je ne vais me servir que d'un nombre limité d'objets : par exemple la tuile sur laquelle je suis actuellement
Et sur cette tuile, je ne vais me servir que de certaines information (personnages et quêtes liées qui y sont liés), il y aurait un moyen simple de savoir jusqu'a quel profondeur je vais chercher l'information?
Je n'ai pas besoin des quêtes des PNJ sur le plateau de jeu (mais je dois voir les PNJ), par contre j'ai besoin des quêtes dans mon cadre "action possibles". Voilà deux contextes différents dans lesquels j'ai besoin d'informations différentes pour des mêmes objets. Comment différencier ces cas? (constructeurs différents?)
[POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB
[POO] Bonne pratique n°2: ... (à venir)
Suite a ce tread : Aide dans une requetes, et surtout d'une dérive sur l'augmentation du nombre de requetes SQL qu'entrainait le passage d'une programmation procédurale vers la POO, j'ai décidé de créer un nouveau thread sur les bonnes pratiques a adopter.
Donc ce tread ci concernera la réutilisation des objets.
Comme exemple, je vais en prendre un que je connais bien, c'est a dire mon jeu
J'ai un plateau contenant des tuiles. Chaque tuile est d'un certain type (auberge, herbe, eau, foret, ...)
Je n'ai pas beaucoup de type de tuiles différentes, donc je charge tous les types en mémoire, dans un tableau que je vais appeler $type_de_tuile avec comme indice l'identifiant
Lorsque je place une tuile sur le plateau visible à l'écran (mon plateau en db fait +- 1 million de cases, et j'en affiche une vingtaine à l'écran),
-je crée une tuile d'un certain type, et là je passe en paramètre le type de tuile (objet) par référence, et non par copie (donc je n'ai en mémoire qu'un seul objet, et non des copies, ce qui permet un certain gain de mémoire).
De plus, comme mon objet "type de tuile" est déjà créé, j'économise la re-création de l'objet "type de tuile", et donc les doublons avec a nouveau des accès a la DB.
La question qui me vient à l'esprit : Aurais-je eu intéret à ne créer au vol que les type de tuile que j'utilise effectivement? (Singleton sur le type de tuile?)
Exemple d'appel (simplifié) :
ma_nouvelle_tuile=new tuile(&type_tuile,pos_x,pos_y);
De même, lorsque je place un personnage, je passe en paramètre la tuile sur laquelle il doit se placer (avec passage par référence), de manière a éviter les doublons si jamais il y a plusieurs personnages sur la même tuile.
Autre question ouverte : lorsque je fais un appel AJAX, et je sais d'avance que je ne vais me servir que d'un nombre limité d'objets : par exemple la tuile sur laquelle je suis actuellement
Et sur cette tuile, je ne vais me servir que de certaines information (personnages et quêtes liées qui y sont liés), il y aurait un moyen simple de savoir jusqu'a quel profondeur je vais chercher l'information?
Je n'ai pas besoin des quêtes des PNJ sur le plateau de jeu (mais je dois voir les PNJ), par contre j'ai besoin des quêtes dans mon cadre "action possibles". Voilà deux contextes différents dans lesquels j'ai besoin d'informations différentes pour des mêmes objets. Comment différencier ces cas? (constructeurs différents?)
Je signale que je ne détiens pas la vérité unique et absolue, je peux me tromper. La critique peut aussi être constructive. Critiquez moi!
La quête d'Ewilan
http://easy2hack.ma-soiree.be
La quête d'Ewilan
http://easy2hack.ma-soiree.be