Non penso che si tratti di operazioni atomiche, sincronizzazione, programmazione asincrona o transazioni.
Penso che si tratti di uno stato significativo.
In questo momento hai tre stati possibili. Il campo caricato dell'oggetto è vero, è falso o il record degli oggetti non esiste.
La domanda allora è che cosa significano questi tre stati? Come arriviamo a loro? Come li lasciamo?
Mi piacerebbe pensare che iniziamo con il record non esistente. Quindi qualcosa decide che abbiamo bisogno di memorizzare un oggetto my nel DB e ora siamo caricati: false. Per quanto ne so, passa un decennio e poi qualcosa decide che è il momento di caricare. Dal momento che siamo ancora caricati: falso qualcosa prova a caricare il nostro oggetto. Una volta che il server ci dice che ha il file, possiamo impostare il caricamento su true.
Ora è certo che tutto può accadere durante tutto questo, ma qui non c'è nulla di transazionale. Lasciamo caricato come falso finché non lo sappiamo caricato. Se il cavo di alimentazione viene strappato via prima che riusciamo a capovolgere il bit, allora pensiamo che dobbiamo caricare di nuovo. Non c'è modo di fermarlo.
Quello che potremmo fare è controllare con il server prima di caricare e confermare che ha bisogno del file. O possiamo ciecamente sovrascrivere cosa c'è e salvare la seccatura.
Quello che sarebbe sciocco sarebbe "ripristinare" il caricamento del file in modo che possiamo inviarlo di nuovo. Tutto ciò che si traduce è la possibilità di sovrascrivere il file.
Quindi se quegli stati esprimono tutto ciò che devi sapere, allora stai bene. Ora se hai bisogno di fare qualcosa di speciale o sapere se si è verificato un errore per una buona ragione come il disco rigido del server è pieno, allora forse vuoi registrare più informazioni di quelle vere e false da qualche parte.
Una volta che hai deciso di farlo, pensa a cosa vuoi fare al riguardo.