Segui la seguente sequenza di eventi:
- Il livello aziendale richiede i dati
x
ey
dal livello dati. - Il livello dati restituisce la versione 1 di
x
ey
. - Il livello aziendale inizia a eseguire la logica in base ai dati
x
ey
. - Un'altra operazione (concorrente) aggiorna i dati
x
alla versione 2. - Il livello aziendale indica al livello dati di salvare nuovi dati
z
in base alla logica al passaggio 3.
I dati z
salvati nel passaggio 5 ora sono stati salvati in base a dati incoerenti o "obsoleti". I dati x
sono diventati obsoleti durante la transazione commerciale . Supponiamo ad esempio che data x
contenga un flag che indica se è consentita la creazione di z
di dati.
In passato ho visto questo problema affrontato da:
- Accoppia strettamente la logica aziendale con le operazioni sui dati. Ad esempio, la logica aziendale nelle procedure memorizzate RDBMS o la logica di co-mingling del codice dell'applicazione con operazioni di dati sensibili alla persistenza. o;
- Ignorare il problema perché la probabilità x impatto = troppo bassa per essere preoccupata con
La mia domanda: esiste una terza opzione valida? Qualcosa che assicuri coerenza mantenendo una sana separazione delle preoccupazioni tra il business e i livelli di dati.
Questo è qualcosa che gli ORM affrontano? So che si occuperanno di concorrenza ottimistica per i dati scrive , ma non voglio aggiornare i dati x
, ma assicurati che nient'altro l'abbia aggiornato durante il corso della transazione commerciale. O più specificamente, che "la creazione di z
è consentita?" il flag non è stato aggiornato.
Per qualsiasi risposta o commento specifico della piattaforma, sto lavorando con C # e Postgres.