Penso di poter descrivere questo problema in modo astratto, ma suppongo che sarà più facile capire quando lo descriverò in un ambiente reale.
Il problema
Immagina un editor grafico in cui è possibile inserire diversi oggetti grafici tramite trascinamento della selezione:
Oraquandolasciolìl'oggettomezzotrasparente.Attraversoalcunicalcolipesantisiottieneilseguenterisultato:
Fino ad ora eseguiamo il calcolo nel momento in cui l'utente rilascia il mouse in modo sincrono. Significa che aspetta di dire due secondi prima di poter usare il programma. Come ho già detto, questo è solo un esempio semplificato. Ha bisogno di molto più di questa interazione per avere un tempo di calcolo di due secondi, ma succede.
Ora abbiamo pensato che sarebbe stato carino eseguire l'intero calcolo in modo asincrono, in modo che l'utente utilizzasse il resto dell'applicazione durante questo periodo. E qui sta il problema L'utente potrebbe ora in questi due secondi innescare ulteriori gocce a suo piacimento.
Significachehalasciatocaderetreoggetti(a,b,c)mentrenemmenoilprimoèstatocalcolatocompletamente(A).
Soluzione1
L'utente può rilasciare gli oggetti a suo piacimento. Le modifiche vengono accumulate dopo che il primo calcolo è pronto.
Il problema con questa soluzione è che l'utente rilascia oggetti nello stato iniziale del foglio di lavoro, presumendo probabilmente che il primo oggetto (a) non sia mai stato inserito. Confonderà definitivamente l'utente.
Soluzione 2
Glioggettirilasciati(b,c)sonosemplicementeignorati.Ovviamentel'interfacciautentesarebbe"bloccata" con una sovrapposizione e il rilascio sarebbe impossibile.
Il problema con questa soluzione è che avrei bloccato di nuovo l'interfaccia utente solo ora con il mio overlay personalizzato.
La domanda
Hai riscontrato uno di questi problemi? Esiste una soluzione più intelligente rispetto a una qualsiasi delle due presentate?