MVC con PyQt - Come ridurre le query di dati dalla vista dal modello?

1

Attualmente sto sviluppando un programma Python con una GUI basata su Qt 5. Uso un modello MVC che ho trovato su Github .

Supponiamo che una singola casella di controllo sia stata selezionata o deselezionata e che il modello sia stato aggiornato. La modifica del modello fa sì che la vista si aggiorni automaticamente poiché la vista è un osservatore del modello. Gli aggiornamenti della vista vengono eseguiti dal metodo update_ui_from_model (self) all'interno della classe MainView.

Se la mia finestra di aplication contiene molti widget (TextEdit, PushButton, RadioButton, ...), tutti interrogheranno il suo stato / contenuto dal modello, sebbene sia stata modificata una sola casella di controllo.

Questo aspetto non è molto efficiente per me. È possibile raggiungerlo (nel mio esempio) solo la casella di controllo interroga il suo nuovo stato dal modello? Spero di aver capito il concetto nel modo giusto. ;)

    
posta PSaR 14.03.2018 - 16:01
fonte

1 risposta

0

Questo dipende molto dalla natura esatta dell'applicazione. In genere, "il modello" è un assortimento di dati / business logic e non solo un singolo oggetto. Ogni parte della vista osserverebbe quindi solo quelle parti del modello che sono rilevanti per essa. Si potrebbe anche considerare che ci sono diversi tipi di eventi nel modello e che le parti di vista osservanti sono interessate solo a un tipo specifico di evento / segnale. Forse potresti filtrare questi eventi e saltare gli aggiornamenti non necessari?

Ovviamente ciò comporta una maggiore complessità. Devi decidere: meno aggiornamenti valgono la maggiore complessità? Il tuo attuale design potrebbe essere abbastanza buono.

Esistono anche diverse architetture alternative per gestire questo flusso di dati. Per esempio. MVVM distingue tra il modello generale e il ViewModel osservabile. In MVP, un Presenter media tra la vista e il modello, in modo che l'interfaccia utente non venga registrata direttamente per modellare gli eventi. Queste architetture non sono intrinsecamente superiori a MVC, ma non devi utilizzare MVC se non ritieni che sia adatto.

    
risposta data 15.03.2018 - 17:59
fonte

Leggi altre domande sui tag