Questions sur architecture classes/managers Php objet
Bonjour à tous !
Actuellement en train de travailler sur un projet pour parfaire mes connaissances sur Php Objet, j'ai quelques questions à vous poser.
Pour ce projet j'utilise quelques design pattern minutieusement choisis et adaptés à celui-ci. Bien que mon projet ne soit pas énorme et donc que l'utilisation de un ou deux DP soit un peu démesurée, je le fais surtout pour m'améliorer : le projet étant dans une optique de travail.
De ce côté là je pense que mon architecture tient la route.
Pour mes questions je vais plutôt partir sur un exemple très simpliste.
Cependant, j'ai quelques doutes sur tout ce qui concerne les échanges avec la base de données.
Actuellement, je travaille en MVC. Du côté Model, j'ai l'arborescence de dossiers suivante :
- Model
- Interface
- Classe
- Manager
- artiste.manager.php
- manager.manager.php
- Exception
Voici le code du fichier manager.manager.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php
class Manager{
protected $_db;
public function __construct($db)
{
$this->setDb($db);
}
public function setDb(PDO $db)
{
$this->_db = $db;
}
}
?> |
Voici le code du fichier artiste.int.php
Code:
1 2 3 4 5 6
| <?php
interface IArtiste{
public function getPrenom($prenom);
public function getNom($nom);
}
?> |
Voici le code du fichier $artiste.class.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?php
class Artiste implements IArtiste{
private $_prenom;
private $_nom;
public function getPrenom(){
return $this->_prenom;
}
public function getNom(){
return $this->_nom;
}
public function __toString(){
return $this->_prenom.' '.$this->_nom;
}
}
?> |
Voici ce que fait mon manager :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
class ArtisteManager extends Manager {
public function getInfosProfilInterprete($id){
$q = $this->_db->prepare('SELECT * FROM ARTISTE WHERE ID_ARTISTE = :id AND TYPE_ARTISTE = INT');
$q->bindValue(':id', $id);
$q->execute();
$res = $q->fetch(PDO::FETCH_ASSOC);
$art = new Artiste($res['PRENOM_ARTISTE'],$res['NOM_ARTISTE']);
return $art;
}
}
...
?> |
Venons en à mes questions à présent.
Déjà est-ce que cette structure est plutôt correcte niveau implémentation objet ?
Et sur mon projet, on trouve dans chaque manager la totalité des fonctions qui sont chargées d'aller "piocher" les données dans la DB et qui me fabriquent mes objets.
Cependant, on imagine bien que le manager Artiste va comprendre une grande quantité de fonctions diverses. Bien que ces fonctions ne concernent que la table Artiste, je trouve tout de même que mon manager devient vite bordélique. Je pense alors que je loupe quelque chose d'évident dans la conception de mon projet. Comment pourrais-je rendre plus lisible la lecture de mes managers ?
Merci d'avance pour votre réponse, je me tiens à votre disposition si vous souhaitez de plus amples informations.
Cordialement,
Lystik.