Le versioni MVVMCRoss 3.x e 4.x hanno diverse differenze per quanto riguarda il ciclo di vita di ViewModel, principalmente incentrati su come vengono costruiti, inizializzati e gestiti su come vengono costruiti modili.
mvvmcross 3.x
In MVVMCROSS 3.x, il ciclo di vita ViewModel segue una sequenza nota come CIRS: costruzione, init (), ricarica () e start (). Questa sequenza viene utilizzata per inizializzare e gestire ViewModels. Ecco una rottura:
- Costruzione: ViewModel è istanziato usando il contenitore IOC, consentendo l'iniezione di dipendenza. È qui che i servizi e le altre dipendenze vengono iniettati nel ViewModel.
- init (): questo metodo viene utilizzato per inizializzare i parametri di navigazione. Viene chiamato dopo la costruzione ed è dove si imposteresti in genere eventuali dati o parametri iniziali passati al ViewModel.
- ReloadState (): questo metodo è responsabile della reidratazione dello stato di ViewModel dopo la tomba, che si verifica quando l'app è sospesa e quindi ripresa a causa di basse condizioni di memoria.
- start (): questo metodo viene chiamato quando l'inizializzazione e la reidratazione sono complete. Viene in genere utilizzato per avviare operazioni o attività in corso.
mvvmcross 4.x
MVVMCROSS 4.x continua a utilizzare la sequenza CIRS ma introduce alcuni cambiamenti e miglioramenti:
- La costruzione rimane la stessa, usando il CIO per l'iniezione di dipendenza.
- init () inizializza ancora i parametri di navigazione ma ora è più flessibile, consentendo i parametri di navigazione digitati.
- ReloadState () continua a gestire la reidratazione dello stato dopo la tomba.
- Start () è simile ma può essere usato meno frequentemente a causa dell'introduzione di metodi di inizializzazione più asincroni.
Una variazione significativa di MVVMCRoss 4.x è il supporto continuo per i parametri di navigazione digitati, che consente di passare più dati strutturati tra ViewModels. Inoltre, MVVMCRoss 4.x pone le basi per i futuri miglioramenti nella gestione della navigazione e del ciclo di vita, che sono ulteriormente migliorati in MVVMCRoss 5.x.
differenze chiave
- Parametri di navigazione: MVVMCROSS 3.x passa i parametri di navigazione direttamente al metodo `init ()`, mentre MVVMCRoss 4.x supporta i parametri di navigazione digitati, rendendo più facile passare dati complessi tra ViewModels.
- Flessibilità del ciclo di vita: MVVMCROSS 4.x offre una maggiore flessibilità nella gestione dei cicli di vita di ViewModel, in particolare con l'introduzione di metodi di inizializzazione asincrona.
- Supporto per tombe: entrambe le versioni supportano Tombstoning, ma MVVMCRoss 4.x continua a perfezionare questo processo, garantendo che i ViewModel possano effettivamente salvare e ripristinare il loro stato.
Nel complesso, MVVMCRoss 4.x si basa sulla fondazione stabilita in 3.x migliorando la navigazione, la gestione del ciclo di vita e la flessibilità nella gestione di dati complessi e operazioni asincroni.
Citazioni:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://stackoverflow.com/questions/49322704/mvvmcross-view-model-lifecycle-restore-not-working
[3] https://stackoverflow.com/questions/15961664/viewmodel-lifecycle-when-does-it-get-sposed
[4] https://stackoverflow.com/questions/71959649/does-mvvmcross-have-a-golt-in-message-for-viewmodel-to-hell-view-when-viewappea
[5] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[6] https://www.mvvmcross.com/documentation/advanced/customizing-using-using-app-and-setup
[7] https://www.mvvmcross.com/documentation/tutorials/tipcalc/a-note-about-views-and-viewmodels
[8] https://www.ramotion.com/blog/what-is-mvvm/
[9] https://www.mvvmcross.com/documentation/fundamentals/navigation
[10] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[11] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[12] https://github.com/mvvmcross/mvvmcross/issues/2738