08-06-2009, 11:18 PM
Hop je lance ce débat car je le trouve super important pour tout les développeurs qui s'amuse à simplifier, améliorer, regrouper leurs petits morceaux de code afin de pouvoir les réutiliser.
Ce genre d'exemple, je le retrouve dans pas mal de cas mais travaillant essentiellement sur l'aspect graphique, je vais donc partir de ce point de vue.
De nombreuses fois, je remarque que le développeur s'amuse à ranger son code, à certains moments il se dit même "mince ce que je fais ici, c'est exactement la même chose, je pourrai peut être le simplifier dans un morceau plus générique", et voilà la boucle est lancée.
Cette boucle infernale, je suis déjà tombé dedans, à plusieurs reprises... Et le pire c'est que ça continue. Mais je retiens des leçons à chaque fois et je trouve que c'est intéressant de voir à quel point je vois d'autres personnes reproduire ce schéma sans pour autant se rendre compte que cela impliquera dans le long terme un rebricolage d'un code simple au départ qui est devenu une vraie usine à gaz. :/
Je donne un exemple : je dispose d'une page de statistiques de joueurs ainsi qu'une page de statistiques de pnj. Pourtant je remarque qu'après avoir fait mes deux pages, la quasi-totalité des statistiques sont identiques à l'exception près que le pnj lui n'a pas d'amis (le pauvre :p). Bien entendu cette liste d'amis est mis en évidence dans un endroit tellement bloquant que je ne peux pas dans un premier temps faire ma fiche de personnage, puis greffer cette liste d'amis.
C'est alors que vient souvent l'idée suivante : "Au final c'est la même page web, il me suffirait juste de faire exactement la même page pour les pnj et les joueurs, et de vérifier si c'est un pnj ou un joueur pour afficher ma liste d'amis".
Et je suis absolument contre cette idée.
Tout simplement parce que même si ça simplifierait le code, même si c'est le même bloc de code qui est utilisé, je trouve que c'est archi-faux de s'amuser à vérifier l'état du personnage (joueur ou pnj) dans la page , pour afficher cette liste.
Et quitte à avoir deux pages différentes qui utilise des blocs de code qui seront probablement identique, je privilégierai cette dernière solution car au moins je suis sur d'une chose : si demain je change d'avis en me disant que pour les pnj, certaines statistiques n'ont pas besoin d'être affichées, et bien je n'ai pas une nouvelle condition qui se balade dans la page générique pour vérifier si je dois les afficher.
Cette histoire, beaucoup se diront :
"C'est évident que la deuxième solution est plus rentable, il n'y avait pas besoin de post pour ça..."
Et pourtant des personnes ne seront pas d'accord avec vous tout en vous répondant :
"Pourquoi j'utiliserai cette solution, de toute façon on ne compte pas changer cette page là... et puis ça fait du code en plus à maintenir des deux côtés !".
Voilà, et je remarque que chacun des deux avis est tout autant réparti équitablement alors du coup je me pose (et je vous pose) des questions sur ces deux méthodes :
En pratiquez-vous une en particulière ?
Pratiquez-vous les deux ?
Ou aucune des deux , peut-être avez-vous une autre méthode encore plus simple selon vous ?
PS : Bien entendu, vous aurez remarqué que j'ai une petite préférence sur le fait de dupliquer une partie du code pour différencier deux cas différent, cela ne m'empêche pas de regrouper certains composants entre-eux pour éviter justement d'avoir trop de duplication et du coup, une double maintenance à effectuer.
Ce genre d'exemple, je le retrouve dans pas mal de cas mais travaillant essentiellement sur l'aspect graphique, je vais donc partir de ce point de vue.
De nombreuses fois, je remarque que le développeur s'amuse à ranger son code, à certains moments il se dit même "mince ce que je fais ici, c'est exactement la même chose, je pourrai peut être le simplifier dans un morceau plus générique", et voilà la boucle est lancée.
Cette boucle infernale, je suis déjà tombé dedans, à plusieurs reprises... Et le pire c'est que ça continue. Mais je retiens des leçons à chaque fois et je trouve que c'est intéressant de voir à quel point je vois d'autres personnes reproduire ce schéma sans pour autant se rendre compte que cela impliquera dans le long terme un rebricolage d'un code simple au départ qui est devenu une vraie usine à gaz. :/
Je donne un exemple : je dispose d'une page de statistiques de joueurs ainsi qu'une page de statistiques de pnj. Pourtant je remarque qu'après avoir fait mes deux pages, la quasi-totalité des statistiques sont identiques à l'exception près que le pnj lui n'a pas d'amis (le pauvre :p). Bien entendu cette liste d'amis est mis en évidence dans un endroit tellement bloquant que je ne peux pas dans un premier temps faire ma fiche de personnage, puis greffer cette liste d'amis.
C'est alors que vient souvent l'idée suivante : "Au final c'est la même page web, il me suffirait juste de faire exactement la même page pour les pnj et les joueurs, et de vérifier si c'est un pnj ou un joueur pour afficher ma liste d'amis".
Et je suis absolument contre cette idée.
Tout simplement parce que même si ça simplifierait le code, même si c'est le même bloc de code qui est utilisé, je trouve que c'est archi-faux de s'amuser à vérifier l'état du personnage (joueur ou pnj) dans la page , pour afficher cette liste.
Et quitte à avoir deux pages différentes qui utilise des blocs de code qui seront probablement identique, je privilégierai cette dernière solution car au moins je suis sur d'une chose : si demain je change d'avis en me disant que pour les pnj, certaines statistiques n'ont pas besoin d'être affichées, et bien je n'ai pas une nouvelle condition qui se balade dans la page générique pour vérifier si je dois les afficher.
Cette histoire, beaucoup se diront :
"C'est évident que la deuxième solution est plus rentable, il n'y avait pas besoin de post pour ça..."
Et pourtant des personnes ne seront pas d'accord avec vous tout en vous répondant :
"Pourquoi j'utiliserai cette solution, de toute façon on ne compte pas changer cette page là... et puis ça fait du code en plus à maintenir des deux côtés !".
Voilà, et je remarque que chacun des deux avis est tout autant réparti équitablement alors du coup je me pose (et je vous pose) des questions sur ces deux méthodes :
En pratiquez-vous une en particulière ?
Pratiquez-vous les deux ?
Ou aucune des deux , peut-être avez-vous une autre méthode encore plus simple selon vous ?
PS : Bien entendu, vous aurez remarqué que j'ai une petite préférence sur le fait de dupliquer une partie du code pour différencier deux cas différent, cela ne m'empêche pas de regrouper certains composants entre-eux pour éviter justement d'avoir trop de duplication et du coup, une double maintenance à effectuer.