Mon équipe et moi avons discuté de l'utilisation du modèle de conception CQRS (Command Query Responsibility Segregation) et nous essayons toujours d'évaluer les avantages et les inconvénients de son utilisation. Selon: http://martinfowler.com/bliki/CQRS.html
nous n'avons pas encore vu suffisamment d'utilisations du CQRS dans le domaine pour être confiants que nous comprenons ses avantages et inconvénients
Alors, qu'en pensez-vous, quand un problème nécessite-t-il l'utilisation du CQRS?
Le CQRS n'est pas un modèle qui englobe l'ensemble de l'application.
Il s'agit d'un concept qui s'appuie sur la conception pilotée par domaine (DDD). Et un concept stratégique important de DDD est le soi-disant Contexte borné.
Dans une application typique, il existe plusieurs contextes bornés, dont chacun peut être implémenté de la manière qui lui convient. Par exemple
Cela ne répond probablement pas à votre question, mais cela pourrait donner un peu plus d'informations sur le sujet. Pour être honnête, je ne pense pas qu'on puisse y répondre du tout sans prendre en compte les spécificités d'un projet, et même alors il y a rarement quelque chose comme une meilleure pratique définie .
Les critiques du CQRL peuvent dire que le CQRS est compliqué et cela pourrait être vrai.
Bien sûr, cela ajoute des frais généraux en développant une application CRUD simple dans le style CQRS, donc je n'envisagerais d'utiliser CQRS que dans les cas suivants:
Lorsque vous avez un domaine commercial complexe ou difficile et:
OU vous avez des utilisateurs qui doivent agir sur des données communes:
OU vous avez des exigences d'évolutivité:
OU vous avez des problèmes de performances (autre côté de l'évolutivité):
OU vous avez une équipe physiquement disjointe:
Ce n'est pas le CQRS qui est trop compliqué, ce sont les ordinateurs qui le sont.
Quand utiliser le modèle de conception CQRS?
Le modèle d'architecture CQRS peut être utilisé lorsqu'il est difficile d'interroger à partir des référentiels toutes les données que les utilisateurs doivent visualiser. Cela est particulièrement vrai lorsque la conception UX crée des vues de données qui traversent plusieurs types d'agrégats et instances. Plus votre domaine est sophistiqué, plus cela a tendance à être vrai.
Lorsqu'il est inapproprié de faire des compromis sur la conception UX, l'utilisation de CQRS tente d'atténuer les problèmes associés à d'autres solutions, telles que:
Pour résumer: utilisez CQRS lorsqu'il est difficile d'interroger les données des référentiels que les utilisateurs doivent consulter, ce qui a tendance à se produire plus votre domaine est sophistiqué.
De mon point de vue, cela ajoute deux avantages majeurs (parmi beaucoup d'autres).
Voici les raisons d'utiliser CQRS:
Dans le scénario du monde réel, CQRS peut être utile lorsque vous avez un client de service frontal/Web qui a besoin de beaucoup de données de plusieurs domaines et que la récupération de ces données de la base de données prend beaucoup de temps.
Dans ce cas, vous pourriez envisager de créer un modèle de lecture distinct qui sera plus rapide à développer et pourrait avoir un temps d'exécution plus rapide.