Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Care sunt principalele diferențe între mvvmcross 4.x și 3.x în ceea ce privește ciclul de viață ViewModel


Care sunt principalele diferențe între mvvmcross 4.x și 3.x în ceea ce privește ciclul de viață ViewModel


Versiunile MVVMcross 3.X și 4.X au mai multe diferențe în ceea ce privește ciclul de viață ViewModel, centrat în principal în jurul modului în care ViewModels sunt construite, inițializate și gestionate.

MVVMcross 3.x

În MVVMcross 3.x, ciclul de viață ViewModel urmează o secvență cunoscută sub numele de CIRS: Construction, init (), reîncărcare () și Start (). Această secvență este utilizată pentru inițializarea și gestionarea ViewModels. Iată o defalcare:

- Construcție: ViewModel este instantaneu folosind recipientul IOC, permițând injecția de dependență. Aici sunt injectate servicii și alte dependențe în ViewModel.
- init (): Această metodă este utilizată pentru inițializarea parametrilor de navigare. Se numește după construcție și este locul în care, de obicei, ați configura orice date sau parametri inițiali trecuți la ViewModel.
- ReloadState (): Această metodă este responsabilă de rehidratarea stării ViewModel după tombstoning, care apare atunci când aplicația este suspendată și apoi reluată din cauza condițiilor de memorie scăzute.
- Start (): Această metodă se numește atunci când inițializarea și rehidratarea sunt complete. Este de obicei utilizat pentru a începe orice operațiuni sau sarcini în curs de desfășurare.

MVVMcross 4.x

MVVMcross 4.X continuă să utilizeze secvența CIRS, dar introduce unele modificări și îmbunătățiri:

- Construcția rămâne aceeași, folosind IOC pentru injecția de dependență.
- init () inițializează în continuare parametrii de navigație, dar acum este mai flexibil, permițând parametrii de navigație dactionați.
- ReloadState () continuă să se ocupe de rehidratarea statului după tombstoning.
- Start () este similar, dar poate fi utilizat mai rar datorită introducerii unor metode de inițializare mai asincrone.

O modificare semnificativă a MVVMCross 4.x este suportul continuu pentru parametrii de navigație dactionați, care permite trecerea mai multor date structurate între ViewModels. În plus, MVVMcross 4.X pune bazele pentru îmbunătățiri viitoare în gestionarea navigației și a ciclului de viață, care sunt îmbunătățite în continuare în MVVMcross 5.X.

Diferențe cheie

- Parametri de navigare: MVVMCross 3.x trece parametrii de navigare direct la metoda `init ()`, în timp ce MVVMcross 4.X acceptă parametrii de navigație dactionați, ceea ce face mai ușor să treacă date complexe între ViewModels.
- Flexibilitatea ciclului de viață: MVVMCross 4.X oferă mai multă flexibilitate în manipularea ciclurilor de viață a modelului, în special cu introducerea metodelor de inițializare asincronă.
- Suport tombstoning: Ambele versiuni acceptă tombstoning, dar MVVMcross 4.X continuă să perfecționeze acest proces, asigurându -se că ViewModels poate salva și restabili eficient starea lor.

În general, MVVMcross 4.X se bazează pe fundația înființată în 3.X prin îmbunătățirea navigației, gestionarea ciclului de viață și flexibilitatea în gestionarea datelor complexe și a operațiunilor asincrone.

Citări:
[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
]
[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-mesage-for-iewmodel-to-tell-iew-when-viewappea
[5] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-ciclu
[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