MVC: come implementare le viste collegate?

1

Sto sviluppando un'applicazione java per visualizzare le serie temporali. Ho bisogno (almeno) di tre viste collegate, il che significa che l'interazione con una di esse aggiorna le altre.

Le viste sono:

  1. Un elenco rappresenta le serie temporali disponibili e attualmente selezionate. Le serie temporali selezionate vengono utilizzate come input per calcoli successivi. La modifica della selezione dovrebbe aggiornare le altre visualizzazioni.

  2. Un grafico a linee mostra le serie temporali disponibili e selezionate. Le serie temporali dovrebbero essere selezionabili da qui facendo clic su di esse.

  3. Un grafico a barre mostra i dati aggregati sulle serie temporali. Quando si effettua lo zoom in un periodo di tempo, il grafico a linee dovrebbe ingrandire lo stesso periodo (e viceversa).

Come implementarlo correttamente, dal punto di vista dell'ingegneria del software? Cioè Mi piacerebbe scrivere codice riutilizzabile e chiaro, gestibile. Quindi ho pensato al pattern MVC.

All'inizio mi piaceva l'idea di avere i tre componenti della vista che osservavano il mio modello classe e per aggiornare le visualizzazioni al momento della notifica. Ma poi, non sembrava giusto archiviare i dati relativi alla vista nel modello. Memorizzazione ad es. la selezione della serie temporale o il livello di zoom della trama nel modello rende implicazioni sulla vista che non vorrei in un modello riutilizzabile.

D'altro canto, il fatto che i controllori si osservino reciprocamente produce molte dipendenze. Quando aggiungo un'altra vista, dovrei registrare tutte le altre viste come osservatore della nuova vista e viceversa, passando attorno a molti riferimenti e introducendo dipendenze. Forse un altro "modello" che memorizza solo i dati relativi alla vista sarebbe la soluzione?

    
posta cw' 06.03.2014 - 09:31
fonte

1 risposta

1

Le "serie temporali attive" e il "livello di zoom" hanno conseguenze leggermente diverse e hanno quindi considerazioni diverse su dove possono essere gestite al meglio.

Per le "serie temporali attive", è meglio registrarle nel modello. Il motivo è che, se c'è un componente che potrebbe apportare modifiche a una serie temporale, allora è meglio se il modello sa già quale si sta operando piuttosto che doverlo passare al modello ogni volta che è necessario accedere al dati. Ciò consente anche un'ottimizzazione (futura) che le serie temporali inattive vengono scartate dalla memoria.

Il livello di zoom è un concetto di interfaccia utente che idealmente non dovrebbe essere noto al modello. Una soluzione consiste nell'avere un singolo controller che gestisca gli eventi di zoom e che il controller aggiorni tutta la vista con la modifica del livello di zoom (è quindi fino alla visualizzazione che cosa fa con le informazioni).
Un'altra opzione è quella di introdurre uno speciale "modello di zoom" che gestisce gli aggiornamenti dello zoom.

Un modo completamente diverso di osservare il livello di zoom è di considerarlo simile alla visualizzazione di una serie di risultati impaginati (con una dimensione di pagina variabile). A volte, l'impaginazione viene spinta al modello per offrire un'opportunità di ottimizzazione per non tenere in memoria l'intero modello.

    
risposta data 06.03.2014 - 11:49
fonte

Leggi altre domande sui tag