Come aggiornare la vista quando il modello cambia?

2

Poiché sto imparando il pattern MVC, questa potrebbe essere una domanda molto ingenua.

So che quando qualcosa accade sulla vista (ad esempio, l'utente fa clic su un pulsante), la vista chiama il controller che a sua volta aggiorna il modello (ad esempio imposta un flag su true). Tuttavia, posso immaginare alcuni scenari in cui il modello cambia senza l'interazione dell'utente: diciamo un timer che, dopo N minuti, attiva una modifica da qualche parte sui dati. Il modello è ora cambiato: come aggiornare la vista di conseguenza?

    
posta Ignorant 03.02.2018 - 23:36
fonte

1 risposta

6

Dipende dal tempo di vita della vista. Per le visioni brevi, potrebbe essere sufficiente non aggiornare affatto la vista. Potrebbe essere presto sufficiente per visualizzare il nuovo contenuto del modello la prossima volta che viene ricreata la vista.

Per le visualizzazioni di lunga vita, è possibile implementare qualcosa come il modello di abbonamento-editore . Ciò significa che la vista assume il ruolo di abbonato e si registra in un luogo separato (come un gestore di eventi) per essere informata su determinati tipi di modifiche del modello. Il modello, tuttavia, assume il ruolo di un editore e invia gli eventi corrispondenti al gestore eventi nel caso in cui i dati cambino. Quindi la vista può rileggere i dati del modello particolare ogni volta che viene notificato un cambiamento.

Farà la differenza anche se la vista offre solo funzionalità di sola lettura o se consente all'utente una funzionalità per modificare il modello. In quest'ultimo caso, potrebbe essere una buona idea implementare una strategia di collisione, per scoprire se i dati originariamente visualizzati nella vista sono stati modificati tra il momento in cui è stato caricato e il momento in cui si verifica l'aggiornamento. Per diversi casi d'uso può essere utile fare affidamento su tale test e aggiornare la vista solo quando si verifica una collisione.

    
risposta data 04.02.2018 - 00:21
fonte

Leggi altre domande sui tag