Voilà, je suis sur un nouveau projet de site web.
C’est un projet par un étudiant pour des étudiants et je fais donc grosso modo ce que je veux.
Autrement dit, je veux en profiter pour en apprendre un maximum.
Je me suis donc imposé les choix suivants :
- PHP5 avec un maximum de programmation orientée objet.
- facilement skinnable et facilement traduisible dans une autre langue => UTF8, XML pour les textes intégrés, rien en hard et XSLT pour les templates
Pour le deuxieme point je me débrouille pas mal, ca ira sans probleme mais la POO me pose problème.
En fait ce n’est pas la poo qui pose problème mais l’utilisation de la base de donnée dans celle-ci. Je m’explique …
Prenons l’exemple d’un forum, lorsqu’on charge une page de topic et que l’on utilise la poo : on génère :
- un objet topic. (le topic sur lequel on navigue)
- un objet post par post affiché sur la page.
- un objet user par post (l’auteur du post affiché).
Dans un cas idéal, on crée des constructeurs qui prennent en paramètre la clé primaire d’un enregistrement en db et on construit l’objet avec, on encapsule donc les requêtes liées à l’objet dans l’objet même. Le problème ici c’est que si on fait ca, on a une requête par constructeur appelé (soit bcp ici ). Alors qu’en une requête avec des jointures cela suffisait. Si on fait cette requête hors des constructeurs on doit donc recuperer les resultats et construire l’objet avec … en quelque sorte, je trouve qu’on brise l’encapsulation.
au lieu de :
$topic = new topic($topic_id); // une requete
$posts = $topic->Getposts($from, $nbr); // $nbr * 2 requetes (une pour le post, une pour l'auteur)
for each ($posts as $post) $post->display();
on va avoir :
$mysqli->prepare ('SELECT blablabla FROM bla INNERJOIN ghghjgjhg INNERJOIN WHERE hjjhkjhk;');
$mysqli->bind_param (un tas de params);
$mysqli->execute();
$mysqli->bind_result (un tas de resultats);
while (mysqli->fetch()) {
$post = new post (le meme tas de resultats);
$post->display();
}
je trouve que la deuxième version n’apporte rien d’intéressant … c’est pas ca de la belle poo … mais je ne sais pas comment gérer pour que tout soit efficace et limiter les accès à la base. Je vais tester pour voir si les requetes preparees peuvent combler en partie les pertes de performances dues à un grand nombre de requetes mais ca m’etonnerait.
Je voudrais donc profiter de vos experiences, php ou asp de toute facon la problématique est la même.
Merci (en espérant que j’aie des réponses )