O MVVMCROSS suporta código específico da plataforma através de vários mecanismos, permitindo que os desenvolvedores criem aplicativos de plataforma cruzada enquanto ainda aproveitam os recursos da plataforma nativa. Aqui está uma visão geral detalhada de como o MVVMcross facilita o código específico da plataforma:
1. Separação de preocupações **
Os aplicativos MVVMCROSS são normalmente estruturados em duas partes principais: um projeto principal e projetos de interface do usuário específicos da plataforma. O projeto principal, geralmente implementado como uma biblioteca de classes portátil (PCL) ou .NET Standard Library, contém a lógica de negócios, modelos, modelos de exibição e interfaces para serviços específicos da plataforma. Essa separação permite a reutilização máxima de código entre plataformas, mantendo o código específico da plataforma isolado nos projetos da interface do usuário [2] [7].2. Inversão de controle (IOC) e injeção de dependência **
O MVVMCROSS usa um contêiner do IOC para gerenciar dependências. Isso permite que os desenvolvedores registrem serviços específicos da plataforma nos projetos específicos da plataforma e os injete nos modelos de visão do projeto principal. Por exemplo, se um aplicativo precisar acessar a câmera, o projeto principal poderá definir uma interface para o acesso à câmera e cada projeto específico da plataforma poderá fornecer sua própria implementação dessa interface. O contêiner do IOC resolve essas dependências em tempo de execução, garantindo que o serviço correto específico da plataforma seja usado [2] [8] [11].3. Serviços específicos da plataforma **
Os serviços específicos da plataforma são implementados nos projetos nativos da interface do usuário. Esses serviços são registrados na classe de configuração de cada projeto de plataforma. A classe de configuração é responsável por Bootstrapping MVVMCROSS e registrar serviços específicos da plataforma com o contêiner do IOC. Isso permite que os modelos de exibição no projeto principal usem a funcionalidade específica da plataforma sem referenciar diretamente as APIs específicas da plataforma [2] [7].4. Estrutura de plug -in **
O MVVMCROSS inclui uma estrutura de plug-in que permite aos desenvolvedores integrar facilmente os recursos específicos da plataforma em seus aplicativos. Os plugins podem fornecer funcionalidades como localização GPS, localização, sensores e muito mais. Esses plugins são registrados no contêiner do IOC, permitindo que os modelos de exibição acessem recursos específicos da plataforma por meio da injeção de dependência. Essa estrutura também suporta implementações simuladas para fins de teste [4] [11].5. Motor de ligação personalizável **
O MVVMCROSS fornece um mecanismo de ligação personalizável que permite aos desenvolvedores criar ligações personalizadas para visualizações específicas da plataforma. Esse recurso é particularmente útil ao trabalhar com controles nativos que não suportam mecanismos padrão de ligação de dados. Ao definir ligações personalizadas, os desenvolvedores podem garantir que seus modelos de visualização estejam adequadamente conectados a visualizações específicas da plataforma [4].6. Apresentadores de plataforma **
O MVVMCROSS usa apresentadores específicos da plataforma (por exemplo, `imvxiosViewPresender`,` imvxandroidViewPresender`) para gerenciar como as visualizações são exibidas em cada plataforma. Esses apresentadores permitem a personalização da lógica de apresentação, permitindo que os desenvolvedores adaptem o comportamento da interface do usuário aos requisitos da plataforma específica [3].Em resumo, o MVVMCROSS suporta código específico da plataforma, fornecendo uma abordagem estruturada para separar a lógica de negócios da implementação específica da plataforma, alavancar o COI e a injeção de dependência para gerenciamento de serviços e oferecer estruturas de ligação e plug-in personalizáveis para integrar recursos nativos. Isso permite que os desenvolvedores maximizem a reutilização do código enquanto ainda oferecem experiências de usuário específicas da plataforma.
Citações:[1] https://www.suneco.nl/blogs/boost-your-xamarin-native-projects-with-mvvmcross/
[2] https://dev.to/christian1006/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework-2920
[3] https://canbilgin.wordpress.com/tag/mvvmcross/
[4] https://github.com/mvvmcross/mvvmcross
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[6] https://mentormate.com/blog/6-reasons-mvvmcross-peeds-xamarin-development-personalizes-ux/
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://stackoverflow.com/questions/14337063/platform-specific-ioc-in-mvvmcross
[9] https://www.mvvmcross.com/documentation/getting-started/getting-started
[10] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[11] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvmcross