27-07-2019, 12:21 AM
La fonction apply ne doit pas être rejetée ou planter : les contrôles doivent être effectués dans la fonction de décision.
Dans le cas où il y a un aggregate par joueur, la commande qui informe de la transaction rentre dans la fonction de décision, qui se charge de toutes les vérifications. Elle émet un event PlayersTradedItems avec des infos comme buyer_id, vendor_id, items, cost… Cet event peut alors alors être géré par un handler qui va envoyer une commande à chaque aggregate.
Si l'eventual consistency pose un problème, tu peux demander qu'elle soit forte (au prix d'une latence puisque les aggregates bloqueront jusqu'à ce que tous les events handlers aient fait leur travail.
Après, méfiance : je ne sais pas si c'est la bonne façon de modéliser. Tu aurais peut-être une réponse plus fiable sur le salon Gitter de Commanded.
Dans le cas où il y a un aggregate par joueur, la commande qui informe de la transaction rentre dans la fonction de décision, qui se charge de toutes les vérifications. Elle émet un event PlayersTradedItems avec des infos comme buyer_id, vendor_id, items, cost… Cet event peut alors alors être géré par un handler qui va envoyer une commande à chaque aggregate.
Si l'eventual consistency pose un problème, tu peux demander qu'elle soit forte (au prix d'une latence puisque les aggregates bloqueront jusqu'à ce que tous les events handlers aient fait leur travail.
Après, méfiance : je ne sais pas si c'est la bonne façon de modéliser. Tu aurais peut-être une réponse plus fiable sur le salon Gitter de Commanded.