UI Disegni di progettazione per progetti non basati su schermo

6

Sto lavorando su un piccolo progetto codificato in Python che utilizza un singolo pulsante per l'input e un LED RGB come feedback, che risponde alle pressioni dei pulsanti e agli eventi asincroni dalla rete.

Poiché il feedback è diventato più complesso (molti di if, els e timer), è diventato evidente che un modello di progettazione dell'interfaccia utente, come MVC o MVP, avrebbe aiutato a separare la funzionalità.

Il codice è già in gran parte MVC in stile, in cui l'input del pulsante è legato a un thread del controller e il LED ha un thread View in cui le animazioni vengono caricate sotto il controllo del controller. Esiste un modello per l'interazione con un dispositivo remoto.

Ad esempio, il pulsante avvia una richiesta HTTP chiamando il controller, che avvia una richiesta asincrona al modello e restituisce una vista che lampeggia il LED per far sapere all'utente che la richiesta è in volo.

Dove sto lottando è come gestire la risposta dal Modello quando la richiesta HTTP è completata. La vista potrebbe sondare il modello, ma sembra uno spreco e forse lento. Il che mi chiede se il Modello debba aggiornare la Vista sollevando un evento o utilizzando un callback fornito dal controller, ma questi legano tecnicamente il Modello alla Vista.

Mi sto anche chiedendo se MVP sarebbe un approccio migliore a questo e usare il Presenter per arbitrare tra Visualizza e Modello.

I tuoi pensieri sull'approccio per questo gadget totalmente sovradimensionato saranno apprezzati.

    
posta Alastair McCormack 19.08.2015 - 19:32
fonte

1 risposta

6

Una volta completata la richiesta HTTP, verranno restituiti alcuni dati e il modello verrà aggiornato dalla parte responsabile del sistema. Quindi genera un evento che indica a tutti coloro che l'hanno sottoscritto "sono arrivati nuovi dati", ma non trasmettono i dati effettivi in questo evento, ma solo le informazioni rilevanti per gli abbonati su quale parte del modello è stata modificata. L'evento stesso può trasportare qualcosa come un ID o una chiave primaria insieme a un'informazione di tipo, ma non di più.

La vista, o qualche tipo di controllore responsabile dell'aggiornamento della vista, si è iscritto a quell'evento. Estrae i dati da visualizzare dal modello. In questo modo, il Modello non ha bisogno di sapere nulla sulla Vista, solo la Vista o il Controllore responsabile deve conoscere il Modello (ma non di più come doveva già sapere prima). Ciò che è più importante, non legare la vista alla parte del sistema che si occupa delle richieste HTTP.

MVP è utile quando si ha la necessità di modificare la visualizzazione effettiva con un'altra, ma si desidera mantenere la stessa logica di presentazione principale (la parte nel Presenter). È anche utile quando è necessario prendere in giro la vista a scopo di test. Se questo è utile nel tuo caso, o meno, dipenderà dalla complessità del tuo sistema nel suo insieme, ma molto probabilmente non dal tuo requisito per l'elaborazione di richieste HTTP asincrone.

    
risposta data 19.08.2015 - 20:04
fonte

Leggi altre domande sui tag