01-09-2015, 07:50 PM
C'est pas super visuel... Le principe est simplement le suivant: la classe PHP représentant un traitement de données (un select des cases de la carte dans la zone [x0;y0]..[x1;y1] par exemple) n'embarque pas directement le SQL, mais charge le contenu d'un fichier SQL pour l'exécuter (grosso modo, du $pdo->prepareStatement(file_get_contents('/resources/sql/.../xxx.sql'))).
Du coup, j'ai une seule classe générique PHP, capable de charger et exécuter un fichier SQL, et un fichier SQL par traitement du modèle (plutôt qu'une classe PHP par traitement à faire dans le SQL, voir par type d'objet dans le SQL, cf l'un de mes récents billets sur MySQL et le traitement par lot).
Au taff, le "MVC" est appliqué différemment: un dossier "model", un dossier "view", un dossier "controlleur", chacun contenant des classes PHP qui, la plupart du temps, embarque des sous-langages (du HTML dans le view/mypage.php, du SQL dans le model/query/mesgenoux.php etc). C'est ignoble à coder (les HTML, les SQL etc sont des chaines de caractères, donc 0 coloration syntaxique, 0 auto-complétion, 0 refactoring possible). Donc j'ai fait différemment sur mes projets.
Même principe pour la partie vue: j'ai un fichier XSL par page affichée, qui utilise le XML que le controleur PHP génère. Du coup, si je veux altérer mon modèle → mettre à jour les fichiers SQL. Si je veux altérer la vue → mettre à jour les XSL (et comme ils peuvent être exécutés coté client plutôt que serveur, ce sont les joueurs eux-même qui pourraient altérer cette vue). Si je veux altérer le contrôleur (ajouter une feature) → mettre à jour le PHP. Ca peut aussi s'appliquer hors du code: tâche à faire → issue tracker; audit de qualité → SonarQube ; déploiement → Magallanes (ou Jenkins? j'ai pas décidé).
C'est ce que j'appelle "séparer les tâches du projet".
Du coup, j'ai une seule classe générique PHP, capable de charger et exécuter un fichier SQL, et un fichier SQL par traitement du modèle (plutôt qu'une classe PHP par traitement à faire dans le SQL, voir par type d'objet dans le SQL, cf l'un de mes récents billets sur MySQL et le traitement par lot).
Au taff, le "MVC" est appliqué différemment: un dossier "model", un dossier "view", un dossier "controlleur", chacun contenant des classes PHP qui, la plupart du temps, embarque des sous-langages (du HTML dans le view/mypage.php, du SQL dans le model/query/mesgenoux.php etc). C'est ignoble à coder (les HTML, les SQL etc sont des chaines de caractères, donc 0 coloration syntaxique, 0 auto-complétion, 0 refactoring possible). Donc j'ai fait différemment sur mes projets.
Même principe pour la partie vue: j'ai un fichier XSL par page affichée, qui utilise le XML que le controleur PHP génère. Du coup, si je veux altérer mon modèle → mettre à jour les fichiers SQL. Si je veux altérer la vue → mettre à jour les XSL (et comme ils peuvent être exécutés coté client plutôt que serveur, ce sont les joueurs eux-même qui pourraient altérer cette vue). Si je veux altérer le contrôleur (ajouter une feature) → mettre à jour le PHP. Ca peut aussi s'appliquer hors du code: tâche à faire → issue tracker; audit de qualité → SonarQube ; déploiement → Magallanes (ou Jenkins? j'ai pas décidé).
C'est ce que j'appelle "séparer les tâches du projet".