Bonjour,
Je souhaite dans un nouveau projet me débarrasser du concept de singleton pour accéder à ma BDD. Je dois donc bien penser l'architecture de l'appli afin de n'avoir qu'une seule connexion à la BDD que seul les différents manager de class auront à connaitre (et à stocker en attribut privé). Les objets métiers eux ne devraient même pas à savoir que j'utilise une BDD.
Je reprend donc mon exemple habituel, une class News et une class User, correspondant toutes 2 à des tables de la BDD et News contenant une clef étrangère nommée "redacteur" vers User (donc un lien vers l'utilisateur qui à rédigé la news).
table user(id, nom, prenom)
table news(id, titre, texte, #redacteur)
Les class métiers User et News sont hydratées par leur managers respectifs (CRUD), les class MUser et MNews auquel on passe au constructeur la connexion à la bdd (objet PDO). L'hydratation ne se fait pas récursivement lorsque l'on stock en attribut d'autres class.
Dans ce contexte, quelle est la bonne méthode, ou le bon pattern pour écrire la fonction public news::GetRedacteur() qui est censé retourné un objet User instancié et hydraté puisque User ignore et doit ignorer l'existence de la BDD ?
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 class MNews { $bdd = NULL; public function __construct(PDO $bdd) {$this->bdd = $bdd} public function Create($titre, $texte, User $u) {...} public function Read($id, News $n) {} // hydrate $n. $n->redacteur est renseigné avec l'ID de user, non avec un objet public function Update($id, $titre, $texte) {...} public function Delete($id) {...} } class News { public $id; public $titre; public $texte; public $redacteur; public function GetRedacteur() {} // retourne un objet User instancié et hydraté par son ID contenu dans $this->redacteur }
En bon hérétique, je souhaite par ailleurs ne pas utiliser d'injection de dépendance...
en vous remerciant
Partager