MVVMCRoss supporta il codice specifico della piattaforma attraverso diversi meccanismi, consentendo agli sviluppatori di creare applicazioni multipiattaforma, sfruttando comunque le funzionalità della piattaforma nativa. Ecco una panoramica dettagliata di come mvvmcross facilita il codice specifico della piattaforma:
1. Separazione delle preoccupazioni **
Le applicazioni MVVMCRoss sono in genere strutturate in due parti principali: un progetto di base e progetti di utente specifici della piattaforma. Il progetto principale, spesso implementato come libreria di classe portatile (PCL) o .NET standard, contiene la logica aziendale, i modelli, i modelli di visualizzazione e le interfacce per i servizi specifici della piattaforma. Questa separazione consente il massimo riutilizzo del codice attraverso le piattaforme mantenendo il codice specifico della piattaforma isolato nei progetti dell'interfaccia utente [2] [7].2. Inversione del controllo (IOC) e iniezione di dipendenza **
MVVMCRoss utilizza un contenitore IOC per gestire le dipendenze. Ciò consente agli sviluppatori di registrare servizi specifici della piattaforma nei progetti specifici della piattaforma e di iniettarli nei modelli di visualizzazione del progetto principale. Ad esempio, se un'applicazione deve accedere alla fotocamera, il progetto principale può definire un'interfaccia per l'accesso alla fotocamera e ogni progetto specifico della piattaforma può fornire la propria implementazione di questa interfaccia. Il contenitore IOC risolve quindi queste dipendenze in fase di esecuzione, garantendo che venga utilizzato il servizio specifico della piattaforma corretto [2] [8] [11].3. Servizi specifici della piattaforma **
I servizi specifici della piattaforma sono implementati nei progetti dell'interfaccia utente nativi. Questi servizi sono registrati nella classe di configurazione di ciascun progetto di piattaforma. La classe di configurazione è responsabile del bootstrap MVVMCRoss e della registrazione di servizi specifici della piattaforma con il contenitore IOC. Ciò consente ai modelli di visualizzazione nel progetto principale di utilizzare funzionalità specifiche della piattaforma senza fare riferimento direttamente alle API specifiche della piattaforma [2] [7].4. Framework plugin **
MVVMCRoss include un framework di plug-in che consente agli sviluppatori di integrare facilmente le funzionalità specifiche della piattaforma nelle loro applicazioni. I plugin possono fornire funzionalità come posizione GPS, localizzazione, sensori e altro ancora. Questi plugin sono registrati con il contenitore IOC, consentendo ai modelli di visualizzazione di accedere alle funzionalità specifiche della piattaforma attraverso l'iniezione di dipendenza. Questo framework supporta anche implementazioni finte a fini di test [4] [11].5. Motore di rilegatura personalizzabile **
MVVMCRoss fornisce un motore di rilegatura personalizzabile che consente agli sviluppatori di creare attacchi personalizzati per viste specifiche della piattaforma. Questa funzione è particolarmente utile quando si lavora con controlli nativi che non supportano i meccanismi di legame dei dati standard. Definendo i legami personalizzati, gli sviluppatori possono garantire che i loro modelli di visualizzazione siano correttamente collegati alle viste specifiche della piattaforma [4].6. Presentatori della piattaforma **
MVVMCRoss utilizza i presentatori specifici della piattaforma (ad esempio, `imvxiosviewpresenter`,` imvxandroidviewpresenter`) per gestire il modo in cui le viste vengono visualizzate su ciascuna piattaforma. Questi presentatori consentono la personalizzazione della logica di presentazione, consentendo agli sviluppatori di adattare il comportamento dell'interfaccia utente ai requisiti della piattaforma specifica [3].In sintesi, MVVMCRoss supporta il codice specifico della piattaforma fornendo un approccio strutturato per separare la logica aziendale dall'implementazione specifica della piattaforma, sfruttare l'iniezione di CIO e dipendenza per la gestione dei servizi e offrendo framework di rilegatura e plug-in personalizzabili per l'integrazione di funzionalità native. Ciò consente agli sviluppatori di massimizzare il riutilizzo del codice pur offrendo esperienze utente specifiche della piattaforma.
Citazioni:[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-mvvvmcross-platform
[6] https://mmenmate.com/blog/6-reasons-mvvmcross-speeds-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-mvvmcross