Οι εκδόσεις MVVMCross 3.x και 4.x έχουν διάφορες διαφορές όσον αφορά τον κύκλο ζωής του ViewModel, που επικεντρώνεται κυρίως στον τρόπο κατασκευής, αρχικοποιημένο και διαχειριζόμενο.
mvvmcross 3.x
Στο MVVMCross 3.x, ο κύκλος ζωής ViewModel ακολουθεί μια ακολουθία γνωστή ως CIRS: Κατασκευή, init (), revoadState () και Start (). Αυτή η ακολουθία χρησιμοποιείται για την προετοιμασία και τη διαχείριση των ViewModels. Εδώ είναι μια κατανομή:
- Κατασκευή: Το ViewModel δημιουργείται χρησιμοποιώντας το δοχείο της ΔΟΕ, επιτρέποντας την ένεση εξάρτησης. Αυτό είναι όπου οι υπηρεσίες και άλλες εξαρτήσεις εισάγονται στο ViewModel.
- init (): Αυτή η μέθοδος χρησιμοποιείται για την προετοιμασία των παραμέτρων πλοήγησης. Ονομάζεται μετά την κατασκευή και είναι εκεί που συνήθως θα δημιουργήσατε οποιαδήποτε αρχικά δεδομένα ή παραμέτρους που μεταβιβάστηκαν στο ViewModel.
- revoadState (): Αυτή η μέθοδος είναι υπεύθυνη για την επανυδάτωση της κατάστασης του ViewModel μετά το Tombstoning, η οποία συμβαίνει όταν η εφαρμογή αναστέλλεται και στη συνέχεια επαναλαμβάνεται λόγω συνθηκών χαμηλής μνήμης.
- Start (): Αυτή η μέθοδος καλείται όταν ολοκληρώνεται η αρχικοποίηση και η επανυδάτωση. Συνήθως χρησιμοποιείται για την έναρξη οποιασδήποτε συνεχιζόμενης λειτουργίας ή εργασιών.
mvvmcross 4.x
Το MVVMCross 4.x συνεχίζει να χρησιμοποιεί την ακολουθία CIRS αλλά εισάγει κάποιες αλλαγές και βελτιώσεις:
- Η κατασκευή παραμένει η ίδια, χρησιμοποιώντας τη ΔΟΕ για ένεση εξάρτησης.
- Το init () εξακολουθεί να προετοιμάζει τις παραμέτρους πλοήγησης, αλλά είναι πλέον πιο ευέλικτη, επιτρέποντας τις δακτυλογραφημένες παραμέτρους πλοήγησης.
- Το ReloadState () συνεχίζει να χειρίζεται την επανυδάτωση του κράτους μετά από επιτύμβιο.
- Το Start () είναι παρόμοιο, αλλά μπορεί να χρησιμοποιηθεί λιγότερο συχνά λόγω της εισαγωγής πιο ασύγχρονης μεθόδων αρχικοποίησης.
Μια σημαντική αλλαγή στο MVVMCROSS 4.x είναι η συνεχιζόμενη υποστήριξη για τις δακτυλογραφημένες παραμέτρους πλοήγησης, οι οποίες επιτρέπουν πιο δομημένα δεδομένα που διέρχονται μεταξύ των προβολών. Επιπλέον, το MVVMCROSS 4.x θέτει τις βάσεις για μελλοντικές βελτιώσεις στη διαχείριση της πλοήγησης και του κύκλου ζωής, οι οποίες ενισχύονται περαιτέρω στο MVVMCROSS 5.x.
βασικές διαφορές
- Παράμετροι πλοήγησης: Το MVVMCROSS 3.x μεταδίδει τις παραμέτρους πλοήγησης απευθείας στη μέθοδο `init ()`, ενώ το MVVMCROSS 4.x υποστηρίζει τις δακτυλογραφημένες παραμέτρους πλοήγησης, καθιστώντας ευκολότερο να περάσουν σύνθετα δεδομένα μεταξύ των προβολών.
- Ευελιξία του κύκλου ζωής: Το MVVMCROSS 4.x παρέχει μεγαλύτερη ευελιξία στον χειρισμό των κύκλων ζωής του ViewModel, ειδικά με την εισαγωγή μεθόδων ασύγχρονης αρχικοποίησης.
- Υποστήριξη Tombstoning: Και οι δύο εκδόσεις υποστηρίζουν το Tombstoning, αλλά το MVVMCROSS 4.X συνεχίζει να βελτιώνει αυτή τη διαδικασία, εξασφαλίζοντας ότι τα ViewModels μπορούν να εξοικονομήσουν και να αποκαταστήσουν αποτελεσματικά το κράτος τους.
Συνολικά, το MVVMCROSS 4.x βασίζεται στο ίδρυμα που δημιουργήθηκε στο 3.x με την ενίσχυση της πλοήγησης, της διαχείρισης του κύκλου ζωής και της ευελιξίας στο χειρισμό σύνθετων δεδομένων και ασύγχρονων λειτουργιών.
Αναφορές:[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-in-message-for-viewmodel-tell-view-when-vieweppea
[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