DEV Community

Cover image for Optimiser la gestion des comportements avec le Pattern Strategy en PHP et Symfony
TechniveK
TechniveK

Posted on

Optimiser la gestion des comportements avec le Pattern Strategy en PHP et Symfony

Parfois, tu as un morceau de code qui peut se comporter différemment selon la situation. Par exemple, tu peux avoir besoin de calculer un tarif différemment en fonction du type de client, ou appliquer un algorithme de tri spécifique. Au lieu d'enfermer ces comportements dans de gros if ou des switch, tu peux utiliser le Design Pattern Strategy pour mieux structurer ton code.

Pourquoi le Pattern Strategy ?

Le Pattern Strategy te permet de séparer la logique d'action du reste du code, pour que tu puisses facilement changer ou remplacer cette logique sans avoir à modifier tout ton programme. Si tu as plusieurs façons d’exécuter une action, c’est ici que ce pattern devient très utile. Plutôt que d'avoir un gros bloc conditionnel, tu délègues le comportement à un objet spécifique.

Exemple concret : Calcul de réduction en fonction du type de client

Imaginons que tu développes une boutique en ligne et que tu aies besoin de calculer une réduction pour différents types de clients (standard, premium, VIP). Au lieu d’écrire des conditions pour chaque type de client un peu partout dans ton code, tu vas pouvoir utiliser le Pattern Strategy pour encapsuler chaque calcul de réduction dans une classe dédiée.

Étape 1 : Interface de la stratégie

On va commencer par créer une interface DiscountStrategy qui définit une méthode calculate() que chaque stratégie de calcul de réduction devra implémenter.

PHP DiscountStrategyInterface

Étape 2 : Stratégies spécifiques

Ensuite, on va créer les différentes stratégies de calcul de réduction. Par exemple, pour les clients standards, il n’y a pas de réduction :

PHP NoDiscountStrategy class

Pour les clients premium, on va appliquer une réduction de 10 % :

PHP PremiumDiscountStrategy class

Et pour les clients VIP, une énorme réduction de 20 % :

PHP VIPDiscountStrategy class

Étape 3 : Classe de contexte

Maintenant, on va créer une classe qui utilisera ces stratégies. Cette classe ne se préoccupe pas du type de réduction à appliquer, elle délègue cette logique à la stratégie qu’on lui passe.

PHP DiscountContext class

Étape 4 : Utilisation dans Symfony

Génial ! On va voir maintenant comment on peut intégrer tout ça dans un contrôleur Symfony. Tu vas choisir une stratégie en fonction du type de client, mais toute la logique du calcul reste dans les classes de stratégie, ce qui rend ton contrôleur bien plus simple et propre.

Symfony DiscountController

Ce que ça t'apporte

  1. Flexibilité : Grâce au Pattern Strategy, tu peux facilement ajouter ou modifier des comportements sans toucher à ton code principal. Il te suffit d’ajouter une nouvelle stratégie de calcul.

  2. Code propre et lisible : Ton code devient beaucoup plus lisible en éliminant les blocs de if ou switch massifs. Chaque stratégie a sa propre classe avec une seule responsabilité, ce qui respecte le Single Responsibility Principle (SRP).

  3. Évolutivité : Si un jour, tu dois ajouter une réduction pour les super VIP avec une réduction indécente de 50 %, tu crées simplement une nouvelle stratégie et le reste de ton code ne change pas !

En résumé

Le Pattern Strategy est un excellent choix lorsque tu as plusieurs façons d’exécuter une même action et que tu veux que ton code reste flexible et évolutif. Plutôt que de te retrouver avec des conditions à n’en plus finir, tu encapsules les comportements dans des classes dédiées, ce qui te permet de les interchanger facilement.

Et toi tu as déjà utilisé le Pattern Strategy dans tes projets Symfony ? N'hésite pas à commenter cet article !

Top comments (0)