Les versions MVVMCross 3.x et 4.x ont plusieurs différences concernant le cycle de vie de ViewModel, principalement centrée sur la façon dont ViewModels est construit, initialisé et géré.
mvvmcross 3.x
Dans MVVMCross 3.x, le cycle de vie ViewModel suit une séquence connue sous le nom de CIRS: Construction, init (), reloadState () et start (). Cette séquence est utilisée pour initialiser et gérer ViewModels. Voici une ventilation:
- Construction: Le ViewModel est instancié à l'aide du conteneur IOC, permettant une injection de dépendance. C'est là que les services et autres dépendances sont injectés dans le ViewModel.
- init (): Cette méthode est utilisée pour initialiser les paramètres de navigation. Il s'appelle après la construction et c'est l'endroit où vous configureriez généralement toutes les données ou paramètres initiaux transmis au ViewModel.
- ReloadState (): Cette méthode est responsable de la réhydrate de l'état de ViewModel après Tombstoning, qui se produit lorsque l'application est suspendue puis a repris en raison de conditions de mémoire faibles.
- start (): Cette méthode est appelée lorsque l'initialisation et la réhydratation sont terminées. Il est généralement utilisé pour démarrer toutes les opérations ou tâches en cours.
mvvmcross 4.x
MVVMCross 4.x continue d'utiliser la séquence CIRS mais introduit certains changements et améliorations:
- La construction reste la même, en utilisant le CIO pour l'injection de dépendance.
- init () initialise toujours les paramètres de navigation mais est désormais plus flexible, permettant des paramètres de navigation tapés.
- ReloAdState () continue de gérer la réhydratation de l'État après la tombe.
- start () est similaire mais peut être utilisé moins fréquemment en raison de l'introduction de méthodes d'initialisation plus asynchrones.
Un changement significatif de MVVMCross 4.x est la prise en charge continue des paramètres de navigation typés, ce qui permet un passage de données plus structuré entre les anciens de vue. De plus, MVVMCross 4.x jette les bases des améliorations futures de la navigation et de la gestion du cycle de vie, qui sont encore améliorées dans MVVMCross 5.x.
Différences clés
- Paramètres de navigation: Mvvmcross 3.x transmet les paramètres de navigation directement à la méthode `INIT ()`, tandis que MVVMCross 4.x prend en charge les paramètres de navigation typés, ce qui facilite la transmission des données complexes entre ViewModels.
- Flexibilité du cycle de vie: MVVMCross 4.x offre plus de flexibilité dans la gestion des cycles de vie de ViewModel, en particulier avec l'introduction de méthodes d'initialisation asynchrones.
- Prise en charge de Tombstoning: les deux versions prennent en charge Tombstoning, mais MVVMCross 4.x continue d'affiner ce processus, en veillant à ce que ViewModels puisse économiser et restaurer efficacement leur état.
Dans l'ensemble, MVVMCross 4.x s'appuie sur la fondation établie dans 3.x en améliorant la navigation, la gestion du cycle de vie et la flexibilité dans la gestion des données complexes et des opérations asynchrones.
Citations:[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-Disposed
[4] https://stackoverflow.com/questions/71959649/does-mvvmcross-have-a-built-in-message-for-viewmodel-to-tell-view-when-viewappea
[5] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[6] https://www.mvvmcross.com/documentation/advanced/customizing-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