Salut,
J'ai un petit problème de conception et dont je ne suis pas sûr du raisonement.
J'ai repris un projet d'il y a quelques mois que j'avais abandonné par manque d'idée.
J'ai notamment des méthodes qui imbriquent plusieurs requetes. Au départ je passais les 3 requetes en paramètres mais c'était vraiment pas le top, et puis je me suis dit pourquoi ne pas faire des attribut genre $fields, $where etc ? La requete est plus facilement modulable (exemple si la requete du dessous à besoin du résultat de la requete du dessus), et bingo ça marche, impec !
Cependant une question me trotte dans la tête et j'ai du mal à voir si je vois juste ou pas du tout:
Si je veux utiliser ce système là partout, je suis obligé à chaque fois de répéter les même attributs dans mes différentes classes, or je trouve ça extrêmement redondant et mal conçu.
Donc mon idée était de faire une classe SQL utilisable par toutes les autres classes (car toutes les autres classes vont utiliser des requêtes SQL), d'après le peu que je connais de la POO pour qu'une classe, méthode etc soit accesible sans devoir l'instancier c'est le mot clé static qu'il faut utiliser.
Ainsi je n'aurais pas à devoir répéter les attributs dans chaque classe, mais il y aurait donc une seule classe SQL que les autres appeleront quand ils en ont besoin (autrement dit à chaque méthode quasiment).
En bref je me demande si ceci est juste ou pas du tout:
SQL::$fields = 'ID, CreationDate, ModificationDate, Type';
SQL::$from = 'medias';
SQL::$where = 'Type = 1';
SQL::$orderBy = 'CreationDate DESC';
$Media = new Media();
$Media->getMedias();
Et par exemple dans la classe Media, méthode getMedias j'aurais donc à un moment donné dans le code:
$results = SQL::select();
au lieu de faire par exemple
$results = $this->getInfo();
et dans getInfo d'avoir ceci:
$sql = 'SELECT '.$this->fields.' FROM '.$this->table etc etc
Qui va donc utiliser les attributs passés ci dessus, dans ce cas là je n'ai donc plus besoin de déclarer tout ça dans la classe Media ni aucune autre puisque la classe SQL est dédiée à ce boulot, ce qui me semble plus logique.
Je sais que ça parait tordu mais le truc en lui même est tordu et sort de l'ordinaire, j'ai quasiment tout en tête mais je bute sur ce point là, enfin pas que ça ne marche pas mais ça me semble pas correcte de répéter les attributs dans chaque classe (et je ne veux pas créer non plus un ramassis de connerie car j'ai mal pensé certaines choses au départ).