JeuWeb - Crée ton jeu par navigateur

Version complète : ORM et un Jeu PHP
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Bonjour,

je "reprend" le dev de mon jeu depuis le début (Cambriolage de Mon PC en Janvier 59), j'ai posé l'architecture il y a quelques jours.
En gros posé le concept MVC, la lisaion Vue Controleur fonctionne bien, en fonction des thèmes et de langue etc...

Maintenant, il me reste la lisaison des données, et je suis confronté à un énorme problème...

Je peux utiliser pour récupérer des données :
- Une api propre à la BDD (mysqli, ...)
- Une couche d'abstraction (Pdo, ...)
- Un ORM (ezPDO, Doctrine, Popel)
- Quelque chose fait soit même, qui permet de faire de l'abstraction tout en permettant de ce passer de 50% du code sql....

Pour l'instant je penche sur la dernière solution qui consiste à faire un générateur de code Bo/Dao à partir de la représntation XML d'une BDD (Générer via logiciel tiers Dbdesigner 4 par exemple).Les Bo ne pose pas de problème, les DAO ne pourront que faire des requetes CRUD sur les Bo(Objets). Tout en proposant une solutions simples pour les requetes plus compliqué...

Mais avant de continuer tête baisser dans mon double projet. Je voulais avoir votre avis sur l'ORM... En effet je pense qu'il est beaucoup trop lourd niveau performance pour un jeu PHP qui fait énormément d'appel à la bdd. Mais je consoit qu'il facilite grandement le coté développement.

Tout simplement imaginons que j'ai une table book avec 10champs, et que je veux n'afficher que le nom du livre. En sql simple suffit de faire "SELECT book_name FROM book..."

Mais avec n'importe quel ORM, il récupère l'objet entier... Et donc les 10 champs.Niveau optimisation on a connu mieux...

Ayant en vu par exemple Stargate-Univers où on avait voulut séparer le serveur BDD du serveur PHP. La bande passante entre le serveur BDD et le serveur PHP serait cramé en un rien de temps...

Donc dans ce sens je pense qu'un ORM est inutilisable si on fait un jeu compliqué et lourd et qu'on vise de nombreux joueurs, avec de petit moyen en machine. Le plus optimisé serai de tout faire à la mano selon moi. Mais bon vous en pensez quoi ?

Ca ressemble un peu au débat procédurale/objet, sauf que dans l'exemple de Stargate Univers, PHP utilise moins de 15% du serveur, alors que mysql est extrèmement gourmand avec plus 70% du serveur.

Dons si le combat où le procédurale gagne en optimisaton face à l'objet, la différence de performance est largement contestable, or avec une base de donnée (Mysql par exemple, quand meme la plus rapide), on ne peut pas oublier l'optimisation...

PS : J'ai juste survoler la liste des ORM, mais j'ai lu toute la doc d'EZPDO, et il n'y a pas de possibilité pour par exemple prendre que le champs nom d'une table.
Propel est super efficace pour la gnération de BDD et d'objet, mais il me semble pas avoir vu aussi le même point dans la doc de symfony...
Pourquoi souhaites-tu utiliser l'ORM si tu crains ses performances ? Est-ce dans une optique d'apprentissage ?
Non c'est dans l'optique facilité d'utilisation...
C'est plus simple d'utiliser une "boite noire" (ORM) qui convertit du code SQL en objet et vice versa, en fesant toute les vérification utile (typage, longueur, etc...).

Que de faire du code SQL à la main, puis transformer le résultat en tableau d'objet, puis retransfomer les modifications en requetes SQL.

L'ORM permet de s'affranchir du SQL, pour rendre plus facile la liaison (objet code)/(donnée bdd).

Par exemple, si ton champs nom ne peut contenir que 3 caractères, alors l'ORM va vérifier avant l'insertion, et même avant l'instanciation de ton objet, que ta donnée est correcte à ta BDD sinon il retourne une Exception.

Alors que manuellement c'est un peu plus,..., pas compliqué, mais beaucoup plus long et moins accessible.

Cependant un inconvénient/avantage de l'ORM, est qu'il dispose de son propre langage pour faire des recherches parmis les données de la BDD, c'est un avantage comme un inconvénient.

Donc je voulais savoir, votre avis sur le rapport facilité de développement/optimisation du développement.

On peut développer un jeu surper léger mais qui nous a pris 3 ans de dev qui tourne sur un serveur de 40e/mois, ou un jeu plus lourd qui requiert 1 an de dev pour tourner sur un serveur de 150e/mois...
J'exagere un peu, mais l'idée est là. Certains dirons que la premièrez solution est moins chère, mais il oublie de prendre en compte le temps de développement, vous êtes ptet tout seule sur votre projet et vous vous foutez du temps qui passe, mais ça reste du temps "perdu"...

PS Oxman :
Jai testé symfony, j'ai lu la doc des autres framework et je reste toujours secptique sur l'utilisation d'un tel outil avec PHP. Autant avec les autres langages je dis pas non, autant avec PHP... Je préfère le concept (Des faux framework) comme PEAR ou Zend Framework qui fournissent unensemble d'outils modulaires, et non pas une prison de développement comme je vois symfony...(Y en a qui vont pas aimer)
Mais suffit de regarder l'outils de génération d'admin qu'on arrete pas de mettre devant notre nez pour nous faire utliser symfony... Si ta clé primaire s'appelle book_id au lieu de id, ça marche pas, si on veut internationalisé le frontoffice, tout en gardant une partie admin unique qui gère les 2 langues il faut faire d'énorme modification, etc...., idem pour la génération CRUD auto qui se base sur le même concept.
Cependant si on fait tout selon les règles de symfony on gagne un temps inestimable...
URLs de référence