No MVVMCROSS V3, foram introduzidas várias mudanças significativas em relação à construção de modelos, que visavam melhorar a testabilidade e a usabilidade para os desenvolvedores. Aqui estão as principais mudanças:
1. Injeção de dependência baseada em construtor: Uma das principais alterações foi a introdução da injeção de dependência baseada em construtor. Isso permitiu que os desenvolvedores injetassem dependências diretamente no construtor do ViewModel, facilitando o gerenciamento de dependências e melhoram a testabilidade. Antes disso, as dependências eram frequentemente gerenciadas por outros meios, o que poderia ser menos direto.
2. Navegação usando classes de navegação digitadas: o MVVMCROSS V3 introduziu um novo sistema de navegação que usava classes de navegação digitadas. Isso significava que, em vez de navegar diretamente para as visualizações, os desenvolvedores poderiam navegar entre os modelos ViewModels usando classes fortemente tipo. Essa abordagem simplificou a navegação entre plataformas, abstraindo detalhes específicos da plataforma.
3. Economizando e recarregando o Estado da ViewModel para Tombstoning: Outra característica significativa introduzida no V3 foi a capacidade de salvar e recarregar o estado da ViewModel. Isso foi particularmente útil para lidar com cenários de "Tombstoning", onde um aplicativo pode ser encerrado pelo sistema operacional devido a restrições de memória e depois restaurado quando o usuário retornar a ele. Ao salvar o Estado do ViewModel, os aplicativos podem manter seu estado atual mesmo após serem demitidos e reiniciados.
4. Os parâmetros de navegação foram passados para o método `init ()`: em versões mais antigas do MVVMcross, os parâmetros de navegação foram passados diretamente para o construtor do ViewModel. No entanto, começando com V3, esses parâmetros foram passados para o método `init ()`. Essa alteração permitiu que o construtor fosse usado apenas para injeção de dependência, tornando o código mais limpo e mais sustentável. O método `init ()` tornou -se o local onde os parâmetros de navegação foram processados, permitindo uma lógica de inicialização mais flexível.
No geral, essas mudanças no MVVMCROSS V3 forneceram uma maneira mais estruturada e sustentável de construir e gerenciar o ViewModels, aumentando a experiência geral de desenvolvimento para aplicações de plataforma cruzada.
Citações:[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-construct-new-Instances
[8] https://stackoverflow.com/questions/39587974/changes-in-mvmcross-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