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.

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
}
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 ?

En bon hérétique, je souhaite par ailleurs ne pas utiliser d'injection de dépendance...

en vous remerciant