DEV Community

Cover image for Comprendre le Design Pattern Factory en PHP et Symfony
TechniveK
TechniveK

Posted on • Updated on

Comprendre le Design Pattern Factory en PHP et Symfony

Si tu cherches à rendre ton code plus flexible et maintenable, le Design Pattern Factory est une excellente solution. Il te permet de déléguer la création d’objets à une méthode spécialisée, ce qui peut être super utile lorsque tu dois gérer différents types d’objets qui partagent une interface commune.

Pourquoi choisir le Pattern Factory ?

Imaginons que tu as plusieurs types d'objets à instancier dans ton projet, chacun avec sa propre logique spécifique. Si tu commences à multiplier les new ClassName() partout, ton code devient rapidement difficile à maintenir. Et c'est là qu'intervient le Pattern Factory.

Tu vas voir, c'est très simple : au lieu d'instancier directement un objet avec new, tu passes par une méthode factory qui se charge de choisir et de créer l’objet qu’il te faut. Ça permet de découpler la logique de création du reste de ton code. Plus facile à maintenir, plus flexible.

Exemple concret : Notification Factory

Imaginons une application qui envoie des notifications. Tu pourrais avoir besoin d’envoyer des emails, des SMS, ou des notifications push. Plutôt que d’ajouter plein de if dans ton code pour savoir quelle classe instancier, tu délègues ça à une factory.

Étape 1 : Interface commune

D'abord, tu vas définir une interface que chaque type de notification doit implémenter. Chaque notification doit avoir une méthode send().

PHP NotificationInterface

Étape 2 : Implémentations spécifiques

Chaque type de notification a sa propre classe, qui implémente cette interface. Par exemple, pour envoyer un email :

PHP EmailNotification class

Pareil pour les SMS :

PHP SMSNotification class

Et pour les notifications push :

PHP PushNotification class

Étape 3 : La Factory

Maintenant, on va créer la factory. C’est elle qui va décider quelle notification instancier selon le type que tu lui passes.

PHP NotificationFactory class

Étape 4 : Utilisation dans Symfony

Et voilà comment tu peux utiliser cette factory dans un contrôleur Symfony. Plutôt que d’écrire une tonne de if pour savoir quel type de notification envoyer, tu laisses la factory décider.

Symfony NotificationController

Ce que ça t’apporte

  1. Séparation des préoccupations : Le contrôleur n’a pas à connaître la logique de création des notifications. Il s'occupe juste de son boulot : envoyer un message. Tout le reste est géré par la factory.

  2. Facilité de maintenance : Si un jour tu dois ajouter un nouveau type de notification (par exemple une notification via Slack), il te suffit d’ajouter une nouvelle classe et de l’intégrer à la factory. Tu n’as pas à toucher au reste du code.

  3. Extensibilité : Le Design Pattern Factory te permet d’ajouter facilement de nouveaux types de notifications sans casser ce qui fonctionne déjà. C’est du pur Open/Closed Principle du SOLID : ton code est ouvert à l’extension, mais fermé à la modification.

Mais attention !

Le Pattern Factory peut ajouter un peu de complexité, surtout dans des projets simples où un new classique ferait largement l'affaire. Il faut donc savoir l’utiliser quand c’est vraiment pertinent. Si tu sais que ton projet va évoluer et que tu vas devoir ajouter de nouveaux types d'objets régulièrement, c'est un excellent choix.

En résumé

Le Design Pattern Factory te permet de centraliser la création d’objets et de rendre ton code plus flexible. En déléguant la création d'objets à une méthode dédiée, tu facilites la maintenance et tu prépares ton projet à évoluer. Ce pattern s'intègre très bien dans un projet Symfony et peut vraiment t’aider à garder ton code propre et organisé.

Alors, prêt à intégrer ce pattern dans ton prochain projet Symfony ? Si tu as déjà utilisé le Factory, n’hésite pas à partager ton expérience. Toujours curieux de savoir comment les autres s’y prennent !

Top comments (0)