Bonjour,
Voilà, je voudrais entamer une discussion sur la meilleure façon d'utiliser le SQL dans un projet en programmation orienté objet. Je ne parle pas de la PDO ni de singleton ou autres design pattern, mais plutôt de savoir quand utiliser une requête SQL.
Je m'explique... La plupart du temps, j'ai des tables qui sont très proches des objets définis dans le code. Par exemple, qui n'a pas déjà eu un cas avec une table client et un objet CClient... On est bien d'accord qu'une bonne parties des méthodes de CClient permettrons de lire ou écrire dans la table client ? on aura surement les méthodes get/set pour chaque champs non fonctionnels de la table.
Je vois 2 philosophies pour gérer ce types de cas de figure en POO... Soit on tape dans la base via une requête à chaque appel de fonction set/get, soit on fait une class qui lit toutes les données du client dans le constructeur, qui stock ces données sous formes de paramètres, et qui travail autant que possible sur ces données directement stocké dans la class.
Mais perso, je trouve les 2 cas affreusement mal foutus par rapport a ce qu'on aurait en programmation procédurale. Soit on pioche ce dont on a besoin au travers d'une multitude de requêtes (ce qui me parait très peu performant), soit on minimise le nombre de requêtes, mais on fait péter la mémoire. Qui plus est, même en faisant une seule requête globale dans le constructeur de la class, à chaque instanciation d'objets, on doit re-préparer la requête, sauf à gérer un système de cache (vous allez me dire que le cache est déjà pal mal géré par la PDO/sql, mais on reste tributaire de la configuration du serveur).
Bref, si vous voulez afficher un listing du nom de tous vos clients, ce qui en procédurale est une opération ultra light devient un truc monstrueux en interne si on programme en pur orienté objet.
Aussi j'aimerai savoir quelle est votre approche face à ce problème ? Voyez vous d'autre façon d'attaquer la base de données en POO ?
En vous remerciant
Partager