Bonjour les amis,

C'est rien de grave mais, j'aimerai avoir un conseil sur le fait de bien organiser son code symfony.Dans le Controller on met souvent

$this->em->persist($object);
$this->em->flush();

pour réorganiser mon code j'ai crée un service pour ne pas répèter ce genre de code comme pour une sauvegarde j'appel juste une fonction save par exemple qui contient déjà ces deux methode persist et flush.

Et c'est cette façon de structurer son code que j'aimerai savoir si vous avez quelque proposition :)
Merci d'avance

4 réponses


Digivia
Réponse acceptée

Non, je ne crée pas de BaseEntity dont je vais faire hériter les autres entités. Car l'héritage est limité à une seule classe et pour moi ce n'en n'est pas un cas d'usage.
Par contre, dans ce cas, je crée un Trait qui me permet de centraliser du code commun à plusieurs classes qui ont simplement en commun des propriétés ou méthodes, c'est purement technique et pas métier. Par exemple toutes les entités ont un identifiant. Donc GetId() va dans son Trait et est appliqué partout.
Je réserve l'héritage à des classes qui dérivent vraiment de la classe mère et qui ont du métier en commun. La nuance est fine mais importante.
Concernant l'héritage, j'aime bien créer une classe abstraite dont vont dériver les classes enfant. Je peux ainsi forcer la création de certaines méthodes, un peu comme une interface.
Les interfaces me permettent de figer un modèle récurrent et de m'assurer que lorsqu'on va étendre le périmètre de l'application, on ne va pas tout casser.

Salut,

Personnellement, je préfère mettre ce genre de fonction dans un Trait, c'est fait pour ça...
De même par exemple que le code que l'on retrouve dans toutes les entités (getId...)

En tous cas, sur le principe, tu as raison, il faut éviter de répéter du code, c'est une bonne pratique.

CedLP
Auteur

Donc pour toi aussi genre tu crée un fichier par exemple BaseEntity et tu mets tous ce qui concerne les id ou les attribus qui se répétent dedans et on extends juste de cela avec tous les entités ?
J'essaie de trouver de bonne pratique pour améliorer mon code voilà pourquoi je demande cela.
En tous cas merci Digivia

CedLP
Auteur

Merci Digiva, c'est bien ce que je sius entrain de faire, tu me rassure que je suis sur la bonne voie, sinon pour les entités les miens ils héritent d'une classe Abstraite BaseEntity qui implemente BaseEntityInterface que j'ai crée vu que dans toute mes table y a createdAt et updatedAt voilà pourquoi j'ai fait cette heritage pour héviter de répéter cela à chaque fois :)