Le CQRS (Command Query Responsibility Segregation) est un pattern d'architecture qui sépare les opérations de lecture (queries) et d'écriture (commands) dans des modèles distincts. Chaque côté peut être optimisé indépendamment pour ses contraintes propres.
Optimisation ciblée
En séparant les modèles, le côté lecture peut utiliser des vues dénormalisées optimisées pour l'affichage, tandis que le côté écriture applique les règles métier avec toute la rigueur nécessaire. Les requêtes de listing ne sont plus bridées par la complexité du modèle d'écriture.
Complexité maîtrisée
Le CQRS ajoute de la complexité architecturale : deux modèles à maintenir, synchronisation éventuelle, cohérence finale. Il n'est pertinent que quand les profils de lecture et d'écriture divergent fortement. Symfony Messenger facilite son implémentation avec les bus de commandes et de requêtes.
Le CQRS n'est pas un choix par défaut. C'est une réponse architecturale à un problème concret : quand le même modèle ne peut plus servir efficacement la lecture et l'écriture.