II.3. CQRS Pattern
Jusqu’à ici, dans nos microservices construits à partir des agrégats ou des bounded contexts , les opérations d’accès au données utilisent les repositories et donc passent par une unique couche d’accès aux donnés.
Ces opérations sont généralement très profondes, surtout dans les systèmes complexes. En plus comme elles sont catégorisés en deux types: command (pour l'écriture) ou query (pour la lecture), elles n’ont pas forcément les mêmes besoins ni utilité de point de vue métier.
Nous pouvons les séparer. D’ailleurs, parfois elles bloquent davantage la décomposition de notre système en verticales.
Mais, nous notons que la séparation ne se fait pas au hasard et elle ne s’applique pas à tout type d’accès au données.
Le principe de CQRS vient pour nous expliquer la séparation (Segregation) de la responsabilité (Responsability) des lectures (Query) et écriture (Command).
Au niveau de la Commande :
- Il se repose sur les événements du domaine-métier dans le Domain Driven Design et comment ceux-ci s’intègrent dans la mécanique de construction des projections.
- Il s’applique aux agrégats du modèle et leurs racines.
Au niveau de la Query :
- Il se repose sur une mécanique de construction des projections à partir de l’intégration des événements métier.
- Il s’applique pour construire les modèles de données dédiées à la lecture.