Nous sommes sur le point d'abandonner l'ES parce que nous avons besoin de modèles de lecture cohérents pour les processus et, tout en essayant de comprendre comment nous pourrions économiser ES, nous avons pensé à une lecture cohérente. Fondamentalement, une commande serait exécutée par un AR, générant la liste des événements. Ces événements seraient d'abord enregistrés dans le magasin d'événements, puis (à travers un certain codage supplémentaire) exclusivement au modèle de lecture (de manière transactionnelle, İ.A. toutes les projections pour tous les événements d'une seule commande seraient enveloppés dans une transaction). Ce n'est qu'après que les événements seront publiés. Donc, fondamentalement, mon code serait comme:Event Sourcing sans cohérence éventuelle?
void ExecuteCommand(Command cmd) {
// validate and stuff...
var events = GenerateEvents(cmd);
PersistAllSync(events);
ApplyProjectionsSync(events);
PublishAsync(events)
}
Outre les problèmes évidents de performance (type de transactions distribuées, sérialisation bascially toutes les commandes) ... pourquoi personne ne fait ça?
Cela peut devenir incohérent en présence d'erreurs. Par exemple, dites que 'ApplyProjectionsSync' réussit, mais que' PublishAsync' échoue. Cela créera une situation où le modèle de lecture a les modifications, mais les événements ne sont pas dans le flux. –
Vous devriez probablement préciser ce que cela signifie; _needing_ compatible read models est en fait assez inhabituel. Le fait de croire que vous avez besoin d'être cohérent quand vous ne le faites pas est assez commun. – VoiceOfUnreason
@Lev pouvez-vous expliquer pourquoi vous avez besoin d'une vue cohérente, s'il vous plaît? Seulement savoir pourquoi nous pouvons trouver le moyen de le faire avec l'approvisionnement d'événements ... – Narvalex