C'è un'entità che viene aggiornata da fonti esterne. Gli eventi di aggiornamento sono a intervalli casuali. E l'entità deve essere elaborata una volta aggiornata. Più aggiornamenti possono essere multiplexati. In altre parole, è necessario che lo stato più attuale dell'entità venga elaborato.
C'è un punto di non ritorno durante l'elaborazione in cui lo stato corrente (e lo stato è consistente, cioè non viene effettuato alcun aggiornamento parziale) dell'entità viene salvato da qualche altra parte e l'elaborazione continua indipendentemente dagli aggiornamenti in arrivo.
Ogni conseguente serie di aggiornamenti deve attivare l'elaborazione, ovvero il sistema non dovrebbe dimenticare gli aggiornamenti. E per ogni entità non dovrebbe esserci più di una elaborazione in esecuzione (prima del punto di non ritorno), cioè lo stato dell'entità non dovrebbe essere elaborato più di una volta.
Quindi quello che sto cercando è un pattern per annullare l'elaborazione corrente prima del punto di non ritorno o abbandonare i risultati dell'elaborazione se arriva un aggiornamento. La sfida principale è ridurre al minimo le condizioni di gara e mantenere l'integrità.
L'entità si trova principalmente nel database con alcuni file su disco. E il sistema è in .NET con servizi Web e code di messaggi.
Ciò che mi viene in mente è una tabella simile a una coda di database. Un aggiornamento in arrivo inserisce una riga in quella tabella e l'elaborazione viene avviata. L'elaborazione raccoglie i dati necessari prima del punto di non ritorno e una volta raggiunta questa barriera esamina la tabella della coda e controlla se ci sono più aggiornamenti recenti per l'entità. Se ci sono nuovi aggiornamenti, l'elaborazione si arresta e i suoi dati vengono scartati. Altrimenti i dati di elaborazione sono persistenti e vanno oltre il punto di non ritorno.
Anche se sembra una soluzione per me non è abbastanza elegante e credo che questo scenario possa essere supportato da una sorta di middleware.
Se dovessi utilizzare le code di messaggi per questo, è necessario accedere all'API della coda nel punto di non ritorno per verificare l'esistenza di nuovi messaggi. E questo approccio manca anche di eleganza.
Esiste un nome per questo modello e una soluzione esistente?