Bonjour,
Admettons que j'ai une simple class user comme suit :
*** tout le code que je donne est écrit à la volé à titre d'exemple et ne vient pas d'un vrai projet ***
et une class entreprise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class CUser { protected $_id; protected $_nom; protected $_prenom; protected $_entreprise_id; // avec les accesseurs qui vont bien // plus les méthodes suivantes : public function SetEntrepriseID($id) {$this->_entreprise_id = intval($id);} public function GetEntreprise() {...} // retourne un object CEntreprise }
Je souhaite gérer l'hydratation de ces class via des managers qui se chargeront de récupérer les données dans la BDD.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class CUser { protected $_id; protected $_nom; // avec les accesseurs qui vont bien }
Actuellement, je pense a des class ordinaires
Tant que je suis dans le main(), aucun problème puisque ma BDD que je ne veut pas mettre dans un singleton est disponible (je risque d'avoir à taper dans plusieurs BDD au cours du projet).
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 class ManagerEntreprise { protected $bdd; public function __construct(PDO $bdd) {$this->bdd = $bdd;} public function Load(CEntreprise & $e) { $s = $this->bdd->prepare('select * from entreprise where id = :id'); $s->execute(array(':id' => $e->GetID())); $res = $s->fetch(); { $e->setNom($res['nom']); } $s->closeCursor(); } //... } class ManagerUser { protected $bdd; public function __construct(PDO $bdd) {$this->bdd = $bdd;} public function Load(CUser & $u) { $s = $this->bdd->prepare('select * from user where id = :id'); $s->execute(array(':id' => $u->GetID())); $res = $s->fetch(); { $u->setNom($res['nom']); $u->setPrenom($res['prenom']); $u->SetEntrepriseID($res['entreprise_id']); } $s->closeCursor(); } //... }
Par contre, quand je veux rédiger la méthode CUser::GetEntreprise() qui est censée me retourner un objet de type CEntreprise, j'ai un problème puisque je n'ai pas connaissance de la BDD dans cette méthode, et je ne peut donc créer ni utiliser mon ManagerEntreprise pourtant nécessaire pour hydrater l'objet à retourner...
Je ne peux qu'en déduire que mon architecture est mal pensée...
Connaissez-vous une solution élégante à ce problème ?
Partager