Mathieu Desnouveaux

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

Sketchnote du Forum PHP 2022 illustrant la présentation "Un moteur bien huilé" par Thibault Richard. La schématisation visuelle présente l'implémentation d'un Rule Engine avec la situation initiale (>500 règles de 3 types : ajout d'exigences, mutation d'un état, ajout d'actions), l'architecture des règles (WHEN condition d'application selon l'état du projet, THEN exécution avec ajout d'exigence/mute le projet/ajoute une action), et le moteur d'exécution (Règle #rules, EXEC pour chaque règle si WHEN alors THEN) avec injection de dépendances avec priorité et chaînage, rendant le système simple, lisible et testable.

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
Thèmes:
🐘 PHP 🏗️ Architecture
Événement:
🎤 Forum PHP

Source: Thibault RICHARD
Carnet:
📚 Carnet 2022-2023

Cette sketchnote est disponible dans un carnet physique.

Publié le 13 octobre 2022