Sto leggendo la serie di articoli di Vaughn Vernon su design aggregato efficace .
A proposito di decidere tra coerenza transazionale vs eventuale, si afferma quanto segue:
Discussing this with Eric Evans revealed a very simple and sound guideline. When examining the use case (or story), ask whether it's the job of the user executing the use case to make the data consistent. If it is, try to make it transactionally consistent, but only by adhering to the other rules of aggregate. If it is another user's job, or the job of the system, allow it to be eventually consistent. That bit of wisdom not only provides a convenient tie breaker, it helps us gain a deeper understanding of our domain. It exposes the real system invariants: the ones that must be kept transactionally consistent. That understanding is much more valuable than defaulting to a technical leaning.
Questo consiglio mi confonde. Ampie parti del software che ho scritto nella mia carriera sono state utili all'utente finale perché le ha liberate dalla responsabilità di mantenere i dati coerenti. Di conseguenza, gli utenti si aspettano di osservare costantemente uno stato coerente, senza ritardo . Per un cliente che paga un software che raggiunge la coerenza, ogni stato incoerente osservato è un bug.
Nella mia esperienza, quando si invia una richiesta, gli utenti di solito preferiscono aspettare un po 'e osservare uno stato coerente rispetto a una risposta immediata che viene modificata in seguito per essere coerenti.
Inversamente, quando è responsabilità dell'utente raggiungere la coerenza, il nostro sistema lo avviserà delle incongruenze, ma gli consentirà eventualmente di raggiungere la coerenza eseguendo diversi comandi più piccoli, invece di richiedere all'utente di fare quindi con un comando gigante.
Perché Evans e Vernon consigliano la coerenza definitiva quando è compito del sistema ottenere coerenza e coerenza transazionale quando è responsabilità dell'utente?
Potrebbe indicare vincoli di esempio e casi d'uso in cui la coerenza transazionale o finale è considerata adeguata in base alla regola precedente?