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

Symfony PHP Discussion :

Créer plusieurs Repository pour une entité, est-ce une bonne pratique ou non ?


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Par défaut Créer plusieurs Repository pour une entité, est-ce une bonne pratique ou non ?
    Bonjour à tous,

    J'aurai souhaité avoir votre avis sur cette question.

    Sur mon application certaines classes Repository sont un peu trop "chargées".
    Par exemple ma classe DocumentRepository possède plus de 15 méthodes et environ 500 lignes. Certaines de ces requêtes n'ont rien avoir entre elles, bien qu'elles soient liées à la même table.

    Pensez-vous que diviser cela en sous-classes soit une pratique acceptable ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
     * @method Document|null find($id, $lockMode = null, $lockVersion = null)
     * @method Document|null findOneBy(array $criteria, array $orderBy = null)
     * @method Document[]    findAll()
     * @method Document[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
     */
    class DocumentRepository extends ServiceEntityRepository
    {
        public function __construct(ManagerRegistry $registry)
        {
            parent::__construct($registry, Document::class);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class RapportRepository extends DocumentRepository {
     
    }
    Merci d'avance pour vos avis

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Ingénieur DevOps
    Inscrit en
    Mai 2002
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 214
    Par défaut
    Bonjour,

    Je pense que c'est une mauvaise pratique d'avoir plusieurs dépôts pour la même entité parce que :
    • les autres développeurs ne sauront pas dans quelle classe se trouve la méthode de façon intuitive (mais cela peut se pallier par une bonne documentation)
    • certaines classes du framework font automatiquement appel au dépôt en fonction du nom de l'entité (le nm de la classe est d'ailleurs le second argument du registre (RegistryManager).


    Mais, tu as raison, des classes avec trop de méthodes sont souvent signe d'un défaut de conception. Pour ma part, dans un repository, je ne place que des méthodes qui n'affectent que l'entité en cours ou qui effectue des recherches très simples. Dès que plusieurs entités sont concernées, je crée une classe EntityModel qui prend en argument du constructeur, le manager d'entité. Dans ce constructeur, je charge des propriétés privées qui sont les différents dépôts affectés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    namespace App\Model;
     
    class FooModel
    {
        public function __construct(EntityManagerInterface $em)
        {
            $this->entityManager = $em;
            $this->repository = $em->getRepository(MonEntite::class);
            $this->otherRepository = $em->getRepository(SecondeEntite::class);
        }
    }
    Après c'est une question d'organisation, donc toute l'équipe doit en discuter et une fois que tout le monde est ok, on fait une petite note de synthèse (de préférence accessible depuis le code, un readme, un markdown, etc.) et on s'y tient
    Alexandre Tranchant
    Ingénieur DevOps pour le Ministère de l'Écologie
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Par défaut
    Bonjour,

    Merci pour cette réponse qui a le mérite d'être claire.

    Cela va m'aider à peser le pour et le contre, et aussi à nettoyer certains de mes repository.

    Bonne journée

  4. #4
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Ingénieur DevOps
    Inscrit en
    Mai 2002
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 214
    Par défaut
    De rien ! N'oublie pas le Tag "résolu" comme la réponse te convient.
    Alexandre Tranchant
    Ingénieur DevOps pour le Ministère de l'Écologie
    Retrouvez mes articles sur PHP et Symfony

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. L’orientation vers plusieurs outils pour une application est-elle mauvaise ?
    Par Hinault Romaric dans le forum Débats sur le développement - Le Best Of
    Réponses: 156
    Dernier message: 19/12/2012, 12h48
  2. Réponses: 1
    Dernier message: 06/03/2012, 16h43
  3. Conseil pour une bonne pratique (héritage)
    Par coberle dans le forum C++
    Réponses: 5
    Dernier message: 27/07/2010, 12h12
  4. Réponses: 3
    Dernier message: 06/04/2007, 10h09
  5. Réponses: 2
    Dernier message: 05/07/2004, 17h50

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