A volte l'utente avvia un'operazione tecnica estesa che richiede un po 'di tempo per essere eseguita. In questi casi, di solito è bello visualizzare una sorta di barra di avanzamento, insieme a informazioni su quale attività viene eseguita in questo momento.
Per evitare l'accoppiamento ravvicinato tra l'interfaccia utente e i livelli logici, solitamente è meglio che la comunicazione avvenga tramite una sorta di proxy. Ovvero, il back-end non dovrebbe manipolare i propri elementi dell'interfaccia utente, né addirittura interagire direttamente con il livello intermedio.
Ovviamente, ci deve essere qualche richiamo da qualche parte per fare in modo che funzioni. In genere l'ho implementato in due modi:
-
Passa un oggetto mutabile al back-end e fai in modo che il back-end apporti le modifiche all'avanzamento. L'oggetto notifica al front-end quando si verifica una modifica.
-
Passa una funzione call-back del modulo
void f(ProgressObject)
oProgressObject -> unit
richiamata dal back-end. In questo caso, il back-end costruisceProgressObject
ed è completamente passivo. Devo costruire un nuovo oggetto ogni volta che vuole segnalare il progresso, presumo.
Quali sono gli svantaggi e i vantaggi di questi metodi? C'è un metodo migliore concordato da usare? Ci sono diverse circostanze per il loro utilizzo?
Esistono tecniche completamente diverse per segnalare i progressi che ho trascurato?