• # Et on peut lire le code source !

    Posté par . En réponse à la dépêche Braldahim, Jeu Web Libre. Évalué à 3.

    Comme on peut lire le code source, je suis allé jeter un œil.

    D'habitude, je suis effaré par le code source des applications utilisant PHP. Ce qui me gêne en priorité c'est l'absence totale de gestion responsable du flot de contrôle et des effets de bord : chaque page initialise tout ce qui bouge comme si elle était la seule sur terre, et quand on veut de la modularité on fout un "include" et on prie pour que la page incluse ne fasse pas tout péter parce que les paramètres de session ne lui plaisent pas.


    Dans votre projet, le flot de contrôle (l'ordre des actions quand on demande une page) est caché par l'utilisation de Zend (je ne connais pas le framework, donc pour moi tout est caché au milieu d'une myriade de MVC, middleware, dynamic class loading, etc. etc.), par contre le découpage du code en parties indépendantes est assez raisonnable, avec l'utilisation de POO en grande quantité. Je trouve toujours curieux de voir des classes qui mélangent logique de jeu (règle, etc.) et une fonction "render" qui fait des regexp replace pour supprimer les espaces inutiles, mais c'est un choix comme un autre.
    Bref, je trouve l'organisation globale du code plutôt bien.


    Par contre, dans les détails, le code est par endroit un peu bof. Une fois qu'on retire tout le boilerplate lié à l'utilisation des templates, la récupération des données dans la base, etc., il y a des passages franchement pas terribles comme (dans library/Bral/Cueillir.php) :

    for ($i=1; $i<=4; $i++) {
    $tab[$i]["estVide"] = true;
    $tab[$i]["quantite"] = 0;
    $tab[$i]["id_fk"] = -1;
    $cueillette[$i]["quantite"] = 0;
    $cueillette[$i]["id_fk"] = -1;
    $cueillette[$i]["id_type_plante"] = $plante["id_fk_type_plante"];
    if ($i == 1 && $plante["partie_1_plante"] > 0) {
    $tab[$i]["id_fk"] = $plante["id_fk_partie_1"];
    $tab[$i]["quantite"] = $plante["partie_1_plante"];
    $tab[$i]["estVide"] = false;
    $cueillette[$i]["id_fk"] = $plante["id_fk_partie_1"];
    $cueillette[$i]["nom_partie"] = $plante["nom_partie_1"];
    }
    if ($i == 2 && $plante["partie_2_plante"] > 0) {
    $tab[$i]["id_fk"] = $plante["id_fk_partie_2"];
    $tab[$i]["quantite"] = $plante["partie_2_plante"];
    $tab[$i]["estVide"] = false;
    $cueillette[$i]["id_fk"] = $plante["id_fk_partie_2"];
    $cueillette[$i]["nom_partie"] = $plante["nom_partie_2"];
    }
    if ($i == 3 && $plante["partie_3_plante"] > 0) {
    $tab[$i]["id_fk"] = $plante["id_fk_partie_3"];
    $tab[$i]["quantite"] = $plante["partie_3_plante"];
    $tab[$i]["estVide"] = false;
    $cueillette[$i]["id_fk"] = $plante["id_fk_partie_3"];
    $cueillette[$i]["nom_partie"] = $plante["nom_partie_3"];
    }
    if ($i == 4 && $plante["partie_4_plante"] > 0) {
    $tab[$i]["id_fk"] = $plante["id_fk_partie_4"];
    $tab[$i]["quantite"] = $plante["partie_4_plante"];
    $tab[$i]["estVide"] = false;
    $cueillette[$i]["id_fk"] = $plante["id_fk_partie_4"];
    $cueillette[$i]["nom_partie"] = $plante["nom_partie_4"];
    }
    }



    Attention, je voudrais pas qu'on interprète mal ma remarque : je trouve le code dans l'ensemble plutôt correct, mieux que la moyenne de ce qu'on trouve en PHP sur le net. C'est juste qu'il est franchement améliorable par endroits, et comme je suis tout content que le code soit disponible en ligne je m'empresse de trouver un truc à commenter en espérant qu'il soit amélioré un jour.