Stai scrivendo un'app in cui il modello (come in MVC) è un oggetto grafico. Occasionalmente, vuoi salvare questo oggetto grafico su disco. Quali sono le migliori pratiche per garantire che la scrittura sia coerente? (Ovvero, come si impedisce che il grafico dell'oggetto si muti nel mezzo di una serializzazione / scrittura?)
Nella mia app, ogni volta che viene attivata una scrittura, eseguo una rapida copia in memoria del mio oggetto grafico (bloccando il thread del modello nel frattempo), serializzo quella copia in un thread in background e poi la scrivo. Ma questa non sembra una soluzione molto elegante, soprattutto se il modello è abbastanza grande. Non voglio bloccare la mia interfaccia utente mentre sta accadendo la copia.
Posso immaginare di bloccare il grafico degli oggetti per impedire la mutazione nel mezzo di una scrittura su disco, ma ciò richiederebbe la perdita di input dell'utente o la manutenzione di una coda di operazioni in sospeso per la durata della scrittura.
Posso anche immaginare di versionare il modello e di incrementare il numero di versione con ogni mutazione, ma ciò richiederebbe anche la persistenza della versione del grafico che viene scritta. Se non vogliamo eseguire una copia completa durante la scrittura, dovremmo attivare una copia ogni volta che un oggetto modello viene mutato durante una scrittura. Sembra che potrebbe diventare abbastanza complesso.
Dove posso leggere di più sulle strategie utilizzate per affrontare questo problema? Quale approccio è generalmente utilizzato per gestire questo problema?