JeuWeb - Crée ton jeu par navigateur
Lutter contre du code trop générique ? - 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 : Lutter contre du code trop générique ? (/showthread.php?tid=4061)

Pages : 1 2


RE: Lutter contre du code trop générique ? - Shao - 10-06-2009

Y a une question que je me pose sur ton exemple naholyr, pourquoi je serai obligé de mélanger ma page de pnj avec ma page de joueur et d'effectuer cette condition qui finalement me fige mon code concernant ces 2 fiches ?

Demain on me dit qu'il faut que les stats soient plus répartis sur la page et du coup je m'amuse à mettre des if ( isPnj ) partout dans ma page pour arranger ça ? :o

D'un point de vue modèle de données, je suis d'accord avec toi : on peut effectuer un héritage (en partant du principe que Personnage est abstrait bien entendu Smile ).

D'un point de vue interface, hum... mouais, je peux très bien avoir 2 pages différentes appelant des fonctions communes d'affichage qui bien sûr seront juste là pour simplifier la maintenance du code quand il faudra changer des choses sur des parties communes des deux interfaces.

Après si je veux déterminer quelle page je dois appeler en cliquant sur un personnage (en supposant qu'une page mélange les pnj et les joueurs), éventuellement il y a cette condition que tu proposes, la magnifique hashmap pour retrouver la vue correspondante, un visitor ou du polymorphisme si le langage le permet... Bref les idées ne manquent pas.

Je vais donner un exemple de généricité qui pourrait être dérangeant selon moi : je fais un deuxième jeu basé sur le même système de personnage (donc le même framework). Mais cette fois-ci, je veux donner de l'importance au genre du personnage dans mon interface (et uniquement dans ce jeu). Je vais pas m'amuser à reprendre la même page et faire des conditions (if jeu2 && mâle)...

Donc là je recommence à refaire mes bouts de code génériques et je fais un truc qui ressemble à une usine à gaz pour pas grand chose puisqu'au final c'est un jeu différent, donc je peux faire des pages différentes non ?
Oui mais bon ça fait de la maintenance en plus si je modifie mon code vu que les pages se ressemblent énormément ce serait dommage de ne pas tout simplifier non ?
Dans ce cas précis, j'ai envie de dire tant pis pour la maintenance, ce sont deux jeux différents alors pourquoi me casser la tête à faire des bouts de code super complexe pour au final quelque chose de super simple ?
Et pareil au niveau modèle de données, si une donnée statistique apparait dans un cas et pas dans un autre, pourquoi j'irai me balader avec cette donnée puisqu'elle me sert à rien ?

Voilà ce que j'appelle la généricité gênante. Smile


RE: Lutter contre du code trop générique ? - naholyr - 10-06-2009

(10-06-2009, 10:54 PM)Shao a écrit : Y a une question que je me pose sur ton exemple naholyr, pourquoi je serai obligé de mélanger ma page de pnj avec ma page de joueur et d'effectuer cette condition qui finalement me fige mon code concernant ces 2 fiches ?

Demain on me dit qu'il faut que les stats soient plus répartis sur la page et du coup je m'amuse à mettre des if ( isPnj ) partout dans ma page pour arranger ça ? :o
*pragmatisme* tu fais ce qui sera le plus simple à maintenir.
Peu de différences ? => Factorisation.
Trop de différences ? => Pas de factorisation.
C'est aussi simple que ça, aucune obligation nulle part ^^

Citation :Dans ce cas précis, j'ai envie de dire tant pis pour la maintenance
Niet ! ça doit toujours rester l'objectif numéro un (ou presque). En l'occurrence tu ne dis pas tant pis pour la maintenance bien au contraire, tu trouves simplement qu'au bout de 3 ou 4 blocs conditionnels dans un template ça devient plus dur à maintenir, et fais donc le choix de deux templates séparés. C'est au contraire un choix que tu justifies par de la facilité de relecture de code (et donc de maintenance).

Citation :Voilà ce que j'appelle la généricité gênante. Smile
On est d'accord Wink Tout dépend du contexte, en l'occurrence *dans la plupart des cas* la solution d'un bloc conditionnel sera bien plus simple, mais si tout est mêlé évidemment la reflexion n'est plus la même.


RE: Lutter contre du code trop générique ? - Allwise - 10-06-2009

Dans l'approche de naholyr, je vois pas où est le problème. La partie métier est commune aux joueurs et aux pnj, la partie affichage est différente : un fichier pour chacun. Donc si tu veux modifier l'affichage de l'un ou de l'autre, t'as juste à modifier le fichier correspondant. Si tu veux créer un affichage nouveau, du genre tous les persos présents sur la map ( pnj + joueurs ), ben tu te crées un nouveau fichier template, mais tu touches rien aux autres. Il n'est pas question de factoriser l'affichage des données de deux entités différentes dans un seul fichier.

Pour ton exemple dérangeant, là non plus je vois pas où ça cloche, c'est pas un problème de généricité, c'est la même chose. Si t'as 1 façon d'afficher tes données, t'as 1 fichier template, si t'en as 10, t'as 10 fichiers templates ( ou partiels, c'est pareil... ). Le truc cool c'est que tu te retapes pas 10 fois le code pour afficher le header, le menu, te connecter à la base de données, récupérer les données, afficher le footer, gérer les sessions etc etc. Et que le jour où tu veux changer un petit détail quelque part, tu fais la modif 1 fois, plutôt que de la faire dans tes 10 fichiers.
Ensuite, à toi de voir si tu t'amuses à mettre 10 if / elseif, un switch, un tableau et un seul et unique if (in_array(...))... Les solutions ne manquent pas, mais rien à voir avec un prob de généricité. Juste une question de contrôle des données / sécurité.
Si t'as fait comme ça pour un jeu X et que tu refais un jeu Y qui suit la même logique, tu pourras garder la logique de traitement. Tu seras de toute façon bien obligé de modifier la couche d'accès aux données et la couche affichage des données puisque le jeu est différent. Mais au moins le squelette sera déjà en place.

J'ai plusieurs fois été confronté à des sites où y avait très peu de fonction, pas du tout de template. Donc pour faire une modif sur le site, obligé de modifier toutes les pages... C'est rageant.


RE: Lutter contre du code trop générique ? - Shao - 11-06-2009

(10-06-2009, 11:31 PM)Allwise a écrit : Si t'as fait comme ça pour un jeu X et que tu refais un jeu Y qui suit la même logique, tu pourras garder la logique de traitement. Tu seras de toute façon bien obligé de modifier la couche d'accès aux données et la couche affichage des données puisque le jeu est différent. Mais au moins le squelette sera déjà en place.

J'ai plusieurs fois été confronté à des sites où y avait très peu de fonction, pas du tout de template. Donc pour faire une modif sur le site, obligé de modifier toutes les pages... C'est rageant.

On est d'accord, je garde la logique de traitement et le squelette de l'ancien jeu. mais je ne prends les templates de jeu numéro 1 pour en faire une librairie et modifier cette librairie pour la rendre compatible avec jeu numéro 2.
Un copier/coller d'un moteur de jeu ne me dérange pas personnellement, il faut juste ne pas avoir peur de modifier la copie du moteur pour que jeu numéro 2 ne contienne pas des choses qui ne lui appartiennent pas. Smile

Après je suis d'accord avec ce que dit naholyr c'est du cas par cas, ça veut dire que si aujourd'hui on me propose de faire telle page, je choisis la solution la plus simple, si demain on me propose plus compliqué, je choisis également la solution la plus simple (à maintenir bien entendu). Le problème dans le monde d'aujourd'hui c'est que cela ne marche pas comme ça, on préfère dire "non je ne peux faire cette modif, ça va tout casser" ou alors "je peux te bricoler un truc à la rache". Pourtant les deux approches sont fausses, on ne casse pas tout, on met juste en évidence le fait que la nouvelle solution a besoin de modifications afin que par la suite la maintenance du code ne soit pas fastidieuse.

Bon du coup je ne sais pas si du coup je m'écarte du sujet principal. Si vous avez un autre titre plus approprié à me suggérer pour ce topic, n'hésitez pas Wink