У MVVMCross V3 було введено кілька значних змін щодо конструкції ViewModel, яка мала на меті підвищити тестуваність та зручність для розробників. Ось ключові зміни:
1. Введення залежності на основі конструктора: Однією з головних змін було введення введення залежності на основі конструктора. Це дозволило розробникам вводити залежності безпосередньо в конструктор ViewModel, що полегшує управління залежностями та покращення тестування. До цього залежності часто керували іншими способами, що може бути менш простим.
2. Навігація за допомогою набраних класів навігації: MVVMCross V3 представила нову навігаційну систему, яка використовувала набрані класи навігації. Це означало, що замість того, щоб перейти безпосередньо до поглядів, розробники могли орієнтуватися між ViewModels за допомогою сильно типних класів. Цей підхід спрощений міжплатформною навігацією шляхом абстрагування деталей, що стосуються платформи.
3. Збереження та перезавантаження стану ViewModel для Tombstoning: Ще однією важливою особливістю, представленою у V3, була можливість збереження та перезавантаження стану ViewModel. Це було особливо корисно для поводження з сценаріями "подушання", де додаток може бути припинено операційною системою через обмеження пам'яті, а потім відновити, коли користувач поверне до неї. Збереження стану ViewModel, Заявки можуть підтримувати свій поточний стан навіть після припинення та перезапуску.
. Однак, починаючи з V3, ці параметри замість цього були передані методу `init ()`. Ця зміна дозволила використовувати конструктор виключно для введення залежності, що робить код чистим та більш реконструкцією. Метод `init ()` став місцем, де були оброблені параметри навігації, що дозволяє отримати більш гнучку логіку ініціалізації.
В цілому ці зміни MVVMCross V3 забезпечили більш структурований та реконструйований спосіб побудови та управління ViewModels, покращуючи загальний досвід розробки для міжплатформних застосувань.
Цитати:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://github.com/mvvmcross/mvvmcross/relase
[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-construct-new-instances
[8] https://stackoverflow.com/questions/39587974/changes-in-mvvmcross-bindings
[9] https://www.mvvmcross.com/documentation/fundamentals/navigation
[10] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[11] https://github.com/mvvmcross/mvvmcross/blob/devell/changelog.md