Nel nostro sistema un file multimediale può avere diversi stati:
- non valida
- vuoto
- caricando
- l'ingestione
- pronto ...
.. a seconda dello stato, le informazioni sul supporto sono accessibili in diversi modi. Ad esempio:
- Durante il caricamento, il nome del file si trova su un file JSON di informazioni temporanee sul file system.
- Quando l'oggetto è pronto, il nome del file potrebbe essere indovinato guardando in un punto specifico del file system (ovvero sotto una directory chiamata dopo l'ID del supporto).
Lo stesso vale per l'attributo "progresso" di un media:
- Durante il caricamento "progresso" rappresenta la dimensione del file / dei byte scaricati.
- Durante la fase di importazione, il progresso rappresenta il numero del passo corrente / i passaggi del numero totale (thumbnailing, post-processing, ecc.)
Lo stato serializzato di un supporto viene utilizzato dall'interfaccia utente per riportare le informazioni all'utente.
Un MediumStateFactory
prova un gruppo di% classi derivate da% co_de ( AbstractMediumState
, MediumStateReady
, ecc.) finché non si qualifica per gestire lo stato corrente del supporto.
Si scopre che per i file piccoli lo stato può cambiare durante la serializzazione: un MediumStateUploading
può essere costruito all'inizio della serializzazione, ma quando lo stato dei media cambia, nel momento in cui viene eseguita la serializzazione effettiva non lo fa t rappresentano più i media, causando errori. Ad esempio, un MediumStateUploading
si aspetta di recuperare la dimensione del supporto dal JSON temporaneo.
Al momento stiamo riavviando la serializzazione interamente se rileviamo un'eccezione durante il processo. Questa è una forza piuttosto bruta e abbastanza brutta.
Quale sarebbe il modo migliore per serializzare oggetti che possono mutare durante il processo di serializzazione?