In MVVMCross V3 werden verschillende significante veranderingen geïntroduceerd met betrekking tot de constructie van het viewmodel, dat gericht was op het verbeteren van de testbaarheid en bruikbaarheid voor ontwikkelaars. Hier zijn de belangrijkste wijzigingen:
1. Constructor-gebaseerde afhankelijkheidsinjectie: een van de belangrijkste veranderingen was de introductie van op constructor gebaseerde afhankelijkheidsinjectie. Hierdoor konden ontwikkelaars afhankelijkheden rechtstreeks in de constructor van het ViewModel injecteren, waardoor het gemakkelijker werd om afhankelijkheden te beheren en de testbaarheid te verbeteren. Voordien werden afhankelijkheden vaak op andere middelen beheerd, wat minder eenvoudig zou kunnen zijn.
2. Navigatie met behulp van getypte navigatieklassen: MVVMCross V3 introduceerde een nieuw navigatiesysteem dat getypte navigatieklassen gebruikte. Dit betekende dat ontwikkelaars in plaats van rechtstreeks naar views te navigeren, konden navigeren tussen ViewModels met behulp van sterk getypte klassen. Deze aanpak vereenvoudigde platformonafhankelijke navigatie door platformspecifieke details te abstraheren.
3. Opslaan en opnieuw laden ViewModel -status voor Tombstoning: een andere belangrijke functie die in V3 werd geïntroduceerd, was de mogelijkheid om ViewModel -status op te slaan en opnieuw te laden. Dit was vooral handig voor het verwerken van "Tombstoning" -scenario's, waarbij een applicatie zou kunnen worden beëindigd door het besturingssysteem vanwege geheugenbeperkingen en vervolgens hersteld wanneer de gebruiker ernaar terugkeert. Door de ViewModel -status op te slaan, kunnen applicaties hun huidige status behouden, zelfs nadat ze zijn beëindigd en opnieuw gestart.
4. Navigatieparameters doorgegeven aan `init ()` methode: in oudere versies van MVVMCross werden navigatieparameters rechtstreeks doorgegeven aan de constructor van het ViewModel. Beginnend met V3 werden deze parameters echter in plaats daarvan doorgegeven aan de methode `init ()`. Door deze wijziging kon de constructor uitsluitend worden gebruikt voor afhankelijkheidsinjectie, waardoor de code schoner en meer onderhoudbaar was. De methode `init ()` werd de plaats waar navigatieparameters werden verwerkt, waardoor een meer flexibele initialisatielogica mogelijk was.
Over het algemeen boden deze veranderingen in MVVMCross V3 een meer gestructureerde en onderhoudbare manier om viewmodellen te construeren en te beheren, waardoor de algehele ontwikkelingservaring voor platformoverschrijdende toepassingen werd verbeterd.
Citaten:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://github.com/mvvmcross/mvvmcross/releases
[3] https://www.reddit.com/r/csharp/comments/12akrcw/mvvm_question_how_do_you_manage_the_interaction/
[4] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[5] https://www.mvvmcross.com/blog/
[6] https://softwareEngineering.stackexchange.com/questions/389086/do-we-need-models-if-we-are-using-viewmodels
[7] https://stackoverflow.com/questions/16723078/mvvmcross-does-showViewModel-always-always-new-Instances
[8] https://stackoverflow.com/questions/39587974/changes-in-mvvmcross-bindingen
[9] https://www.mvvmcross.com/documentation/fundamentals/navigation
[10] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[11] https://github.com/mvvmcross/mvvmcross/blob/develop/changelog.md