J'essaie essentiellement de comprendre la notion de CQRS et les concepts connexes.
Bien que le CQRS n'intègre pas nécessairement la messagerie et la recherche d'événements, il semble être une bonne combinaison (comme on peut le voir avec de nombreux exemples / articles de blog combinant ces concepts)
Étant donné un cas d'utilisation pour un changement d'état pour quelque chose (disons pour mettre à jour une question sur SO), considéreriez-vous que le flux suivant est correct (comme dans les meilleures pratiques)?
Le système émet un UpdateQuestionCommand agrégé qui peut être séparé en quelques commandes plus petites: UpdateQuestion qui vise la racine d'agrégat de questions et UpdateUserAction (pour compter les points, etc.) ciblé sur la racine d'agrégats d'utilisateurs. Ceux-ci sont envoyés de manière asynchrone à l'aide de la messagerie point à point.
Les racines agrégées font leur travail et si tout se passe bien, déclenchez respectivement les événements QuestionUpdated et UserActionUpdated, qui contiennent un état qui est externalisé vers un magasin d'événements .. pour être persistant yadayada, juste pour être complet, pas vraiment le point ici.
Ces événements sont également placés dans une file d'attente pub / sub pour la diffusion. Tout abonné (parmi lesquels probablement un ou plusieurs projecteurs qui créent les vues de lecture) est libre de s'abonner à ces événements.
La question générale: est-il en effet de bonne pratique que les commandes soient communiquées point à point (ie: le récepteur est connu) alors que les événements sont diffusés (ie: le ou les récepteurs sont inconnus)?
En supposant ce qui précède, quel serait l'avantage / l'inconvénient de permettre la diffusion des commandes via pub / sub plutôt que point à point?
Par exemple: lors de la diffusion de commandes lors de l'utilisation de Saga, cela pourrait être un problème, car le rôle de médiation qu'une Saga doit jouer en cas de défaillance d'une des racines agrégées est entravé, car la saga ne sait pas à quelle racine agrégée participent pour commencer. .
D'un autre côté, je vois des avantages (flexibilité) lorsque la diffusion de commandes serait autorisée.