Un moteur bien huilé
Présentation sur l'implémentation d'un Rule Engine pour gérer des centaines de règles métier de manière découplée et testable avec Symfony au Forum PHP 2022

Cette sketchnote a été réalisée lors du Forum PHP 2022. Elle illustre la présentation "Un moteur bien huilé" donnée par Thibault Richard, qui explore l'implémentation d'un Rule Engine pour gérer efficacement des centaines de règles métier dans une application Symfony.
Contenu de la présentation
Thibault Richard nous présente le Rule Engine, un puissant pattern permettant d'implémenter des systèmes complexes de manière découplée, extensible et testable. La présentation part d'une situation initiale complexe : plus de 500 règles de 3 types différents (ajout d'exigences, mutation d'un état, ajout d'actions) qu'il fallait organiser efficacement.
L'architecture proposée sépare clairement les responsabilités : chaque règle définit une condition d'application (WHEN) basée sur l'état du projet et une exécution (THEN) qui peut ajouter une exigence, muter le projet ou ajouter une action. Le moteur d'exécution parcourt toutes les règles et applique celles dont les conditions sont remplies. Thibault dévoile comment il a mis en place cette architecture au sein d'une application Symfony tout en préservant un code simple et lisible grâce à l'injection de dépendances avec priorité et chaînage. Cette approche flexible facilite l'adaptation aux changements et la gestion de cas d'usage complexes.
Points clés à retenir
- Situation initiale complexe : >500 règles de 3 types différents (exigences, mutations d'état, actions)
- Architecture découplée : séparation claire WHEN (condition) / THEN (exécution) pour chaque règle
- Moteur d'exécution simple : parcourt les règles et applique celles dont les conditions sont remplies
- Injection de dépendances : avec priorité et chaînage pour une architecture flexible et maintenable
- Code simple et testable : pattern qui facilite l'adaptation aux changements et la gestion de cas complexes
Cette sketchnote est disponible dans un carnet physique.