IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

POO et BDD, comment utiliser un manager dans un objet métier ?


Sujet :

Langage PHP

  1. #1
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut POO et BDD, comment utiliser un manager dans un objet métier ?
    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

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par comode Voir le message
    L'hydratation ne se fait pas récursivement lorsque l'on stock en attribut d'autres class.
    Pourquoi ?

    Si l'info est disponible, tu dois poursuivre l'hydratation des dépendances

  3. #3
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Bhé elle ne l'est pas, et en plus, ça ne m'arrange pas pour mon exemple, la question étant de savoir comment gérer cette instance PDO pour y avoir accès quand on en a besoin...

Discussions similaires

  1. Comment utiliser le ping dans un prog
    Par debutant-1 dans le forum Linux
    Réponses: 2
    Dernier message: 23/06/2006, 11h09
  2. Réponses: 4
    Dernier message: 16/02/2006, 17h28
  3. Réponses: 7
    Dernier message: 25/11/2005, 18h11
  4. [C#]Comment utiliser un dataset dans plusieurs...
    Par Sonny dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/11/2005, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo