PrestaConcept
Nos réalisations
Nos métiers
  • Découvrez nos métiers
  • Développement web sur mesure

    Nous développons en méthode agile des back sous le framework PHP Symfony, des front en Angular.

  • Maintenance d'applications

    Maintien en condition opérationnelle de votre plateforme Symfony.

  • Expertise Symfony

    Coaching, formation, audit et conseil.

  • Hébergement et Infogérance

    Une expertise de l'hébergement depuis plus de 15 ans et l’infogérance de centaines de machines en production actuellement.

  • Qui sommes nous
  • Découvrez Prestaconcept
  • PrestaConcept

    Notre histoire, nos convictions, notre vision... Découvrez ce qui nous anime !

  • L'équipe

    Plus de 15 ans minimum d'expérience sur Symfony.

  • Nos engagements RSE

    Une société engagée pour un numérique responsable.

  • Nos convictions

    Co-construction, transparence.. Les principes qui guident nos collaborations !

  • Nous rejoindre

    Envie de nous rejoindre ? Consultez nos offres !

  • Blog
    J'ai un projet Nous contacter
    J'ai un projet Nous contacter Menu
    • Accueil
    • Blog
    • Tech
    • 5 Design Patterns que vous avez utilisé au quotidien avec Symfony

    Blog

    5 Design Patterns que vous avez utilisé au quotidien avec Symfony

    Maximilien Delangle
    Maximilien Delangle Développeur Symfony
    Publié le vendredi 5 juillet 2024

    Lorsque nous développons avec Symfony, nous utilisons souvent des design patterns sans même nous en rendre compte.
    Dans cet article, nous présenterons cinq design patterns issus de Symfony, et illustrés de leur code source.

    Disclaimer : Les exemples ont volontairement été simplifiés pour une meilleure compréhension, les liens de la documentation officielle vous seront fournis à chaque point afin que vous puissiez aller plus loin.

    1. Le pattern Factory

    Le pattern Factory propose une interface pour la création d'objets au sein d'une classe parente, tout en déléguant aux sous-classes le choix des types d'objets à créer.

    Qui ne connait pas encore le composant Form de Symfony ?

    Avant l’avènement des APIs, il a été pendant longtemps le composant obligatoire dans toutes les applications web.

    Mais saviez-vous qu'il était conçu à partir du pattern Factory ? C'est dans la class FormFactory que nous pouvons voir l'implémentation de ce pattern.

    Voici 2 des méthodes les plus utilisés de cette classe :

    class FormFactory implements FormFactoryInterface
    {
        public function create($type = 'Symfony\Component\Form\Extension\Core\Type\FormType', $data = null, array $options = [])
        {
            $builder = $this->createBuilder($type, $data, $options);
            return $builder->getForm();
        }
    
        public function createBuilder($type = 'Symfony\Component\Form\Extension\Core\Type\FormType', $data = null, array $options = [])
        {
            return $this->builderFactory->createBuilder($type, $data, $options);
        }
    }
    

    2. Le pattern Strategy

    Le pattern Strategy permet de définir une famille d'algorithmes, de les encapsuler et de les rendre interchangeables.

    Dans Symfony, beaucoup de composants utilisent ce pattern, un des plus connus est le composant HttpClient.

    Dans ce composant il est possible de définir une stratégie de Retry en cas d'échec de la requête. Il est implémenté dans la class RetryableHttpClient

    class RetryableHttpClient implements HttpClientInterface, ResetInterface
    {
        use AsyncDecoratorTrait;
    
        private RetryStrategyInterface $strategy;
        private array $baseUris = [];
    
        /**
         * @param int $maxRetries The maximum number of times to retry
         */
        public function __construct(
            HttpClientInterface $client,
            ?RetryStrategyInterface $strategy = null,
            private int $maxRetries = 3,
            private ?LoggerInterface $logger = null,
        ) {
            $this->client = $client;
            $this->strategy = $strategy ?? new GenericRetryStrategy();
        }
    

    Grace au respect de l'interface RetryStrategyInterface il est possible de définir la stratégie retry que vous souhaitez adopter pour votre client http.

    Si vous souhaitez voir une présentation plus complète de ce pattern, je vous invite à lire notre article sur le sujet.

    3. Le pattern Observer

    Le pattern Observer permet à un objet (le sujet) de notifier d'autres objets (les observateurs) des changements d'état.

    Dans Symfony, ce pattern est couramment utilisé via le composant EventDispatcher et son point d'entrée principal.

    class EventDispatcher implements EventDispatcherInterface
    {
        private array $listeners = [];
        private array $sorted = [];
    
        public function dispatch(object $event, string $eventName = null): object
        {}
        
        public function getListeners(string $eventName = null): array
        {}
    
        public function addListener(string $eventName, callable $listener, int $priority = 0)
        {}
    
        public function removeListener(string $eventName, callable $listener)
        {}
    }
    

    4. Le pattern Decorator

    Le pattern Decorator permet d'ajouter dynamiquement des comportements à un objet. Dans Symfony, le pattern est par exemple utilisé dans le composant HttpKernel, plus précisément pour géré le Cache avecla classe HttpCache.

    class HttpCache implements HttpKernelInterface
    {
        private $kernel;
        private $store;
    
        public function __construct(HttpKernelInterface $kernel, StoreInterface $store)
        {
            $this->kernel = $kernel;
            $this->store = $store;
        }
    
        public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true): Response
        {}
    
        private function lookup(Request $request): bool
        {}
    }
    

    Si vous souhaitez en savoir plus sur ce pattern je vous invite à lire notre article sur le sujet.

    5. La chaîne de responsabilité

    Le pattern Chaine de responsabilité permet à une requête de passer à travers une chaîne d'objets jusqu'à ce qu'un objet puisse la traiter. Dans Symfony, une implémentation de ce pattern existe notamment dans le composant Cache via la classe ChainAdapter

    Le ChainAdapter permet de combiner plusieurs adaptateurs de cache. Il tente de récupérer un élément de chaque adaptateur dans l'ordre jusqu'à ce qu'il trouve l'élément. Lors de l'enregistrement d'un élément, il écrit dans tous les adaptateurs configurés.

    class ChainAdapter implements CacheItemPoolInterface
    {
        private $adapters;
    
        public function __construct(array $adapters, $defaultLifetime = 0)
        {}
    
        public function getItem($key)
        {}
    
        public function save(CacheItemInterface $item)
        {}
    
        public function deleteItem($key)
        {}
    }
    
    

    Si vous souhaitez en savoir plus sur ce pattern je vous invite à lire notre article sur le sujet.

    Blog

    Pour continuer votre lecture ...

    Tech

    Optimisation du développement web avec de l'IA (Chat GPT, Copilot...)

    Par Maximilien Delangle 21/02/2024

    L'avènement de l'intelligence artificielle (IA) dans le secteur de l'information et de la technologie (IT) a déclenché une révolution, changeant radicalement la manière dont nous interagissons avec les machines, concevons les logiciels et abordons le développement web. Parmi les avancées les plus si...

    Lire la suite
    Tech

    AFUPDay 2023: Des sujets bien interessants !

    Par Maximilien Delangle 01/06/2023

    L'AFUP Day 2023, c'était le 12 mai 2023 en simultanée à Lille et à Lyon. Sponsor des éditions lyonnaises et lilloises, nous avons eu le plaisir de participer à celle de Lyon et vous proposons un petit retour sur cette journée.

    Lire la suite
    Tech

    Le pattern Stratégie avec Symfony

    Par Maximilien Delangle 09/02/2023

    C'est un modèle de conception de logiciel qui permet de séparer l'algorithme d'une classe de son exécution. Il est utilisé pour résoudre les problèmes de complexité et de maintenance dans les applications.

    Lire la suite

    Vous avez un projet Laravel ?

    Nous sommes spécialisés en Symfony, et grâce à Web^ID, l’agence sœur du groupe Agile Invest, nous couvrons aussi toute l’expertise Laravel.

    Découvrir Web^ID

    Une question, un projet ?
    Planifiez un échange avec nous !

    Choisissez votre date
    PrestaConcept - Groupe Agile Invest
    5, imp. Morel, 69003 Lyon +33 (0)4 78 54 45 45
    Suivez-nous
    Ecoindex B

    Ce site internet est un site basse consommation. En savoir plus sur l'Ecoindex

    Nos réalisations

  • Logiciel de mise en conformité réglementaire
  • Application de suivi de production des centrales éoliennes
  • Outil d'aide à la décision
  • Portail client
  • Nos métiers

  • Développement sur-mesure
  • Reprise d'application Symfony
  • Expertise Symfony
  • Hébergement & Infogérance
  • Qui sommes-nous

  • PrestaConcept
  • Groupe Agile Invest
  • L'équipe
  • Engagement RSE
  • Blog

  • Tech
  • Méthodologie
  • PrestaConcept
  • RSE
  • © 2025 PrestaConcept
    Mentions légales Politique de confidentialité 🍪
    Retour en haut de page