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.
É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 :
Pour les clients premium, on va appliquer une réduction de 10 % :
Et pour les clients VIP, une énorme réduction de 20 % :
É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.
É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.
Ce que ça t'apporte
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.
Code propre et lisible : Ton code devient beaucoup plus lisible en éliminant les blocs de
if
ouswitch
massifs. Chaque stratégie a sa propre classe avec une seule responsabilité, ce qui respecte le Single Responsibility Principle (SRP).É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)