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
- artiste.int.php
- Classe
- artiste.class.php
- Manager
- artiste.manager.php
- manager.manager.php
- Exception
Voici le code du fichier manager.manager.php
Voici le code du fichier artiste.int.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.class.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?php interface IArtiste{ public function getPrenom($prenom); public function getNom($nom); } ?>
Voici ce que fait mon manager :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } } ?>
Venons en à mes questions à présent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } } ... ?>
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.
Partager