L’article explique comment implémenter le pattern Unit of Work dans Symfony pour centraliser la gestion des opérations (création, mise à jour, suppression) sur différentes sources de données, y compris des services externes comme des API REST ou des files de messages. L’idée est de regrouper ces opérations dans une seule transaction logique, garantissant cohérence, clarté et testabilité, à l’image d’un panier d’achat où les modifications sont validées en une seule fois.
L’auteur propose une architecture en quatre composants : un objet Change pour représenter une opération, un service UnitOfWork pour collecter les changements, des Committer (interfaces) pour gérer l’écriture des données selon le backend, et des Repository modifiés pour enregistrer les changements au lieu de les exécuter immédiatement. Chaque Committer est spécialisé pour un type d’entité et un système de stockage.
L’implémentation repose sur une séparation claire des responsabilités, où le UnitOfWork agit comme un coordinateur central. Les changements sont regroupés par type d’entité avant d’être transmis aux Committer correspondants, permettant une intégration flexible avec Doctrine, des API ou d’autres services.