MVVMCross acceptă codul specific platformei prin mai multe mecanisme, permițând dezvoltatorilor să creeze aplicații multiplă platforme, în timp ce încă utilizează caracteristici ale platformei native. Iată o imagine de ansamblu detaliată a modului în care MVVMCross facilitează codul specific platformei:
1. Separarea preocupărilor **
Aplicațiile MVVMcross sunt de obicei structurate în două părți principale: un proiect de bază și proiecte UI specifice platformei. Proiectul de bază, adesea implementat ca bibliotecă de clasă portabilă (PCL) sau bibliotecă standard .NET, conține logica de afaceri, modele, modele de vizualizare și interfețe pentru servicii specifice platformei. Această separare permite reutilizarea maximă a codului pe platforme, păstrând codul specific platformei izolat în proiectele UI [2] [7].2. Inversarea controlului (COI) și injecția de dependență **
MVVMCross folosește un container IOC pentru a gestiona dependențele. Acest lucru permite dezvoltatorilor să înregistreze servicii specifice platformei în proiectele specifice platformei și să le injecteze în modelele de vizualizare ale proiectului de bază. De exemplu, dacă o aplicație trebuie să acceseze camera, proiectul de bază poate defini o interfață pentru accesul camerei și fiecare proiect specific platformei poate oferi propria implementare a acestei interfețe. Containerul IOC rezolvă apoi aceste dependențe în timpul rulării, asigurându-se că se folosește serviciul corect specific platformei [2] [8] [11].3. Servicii specifice platformei **
Serviciile specifice platformei sunt implementate în proiectele UI native. Aceste servicii sunt înregistrate în clasa de configurare a fiecărui proiect de platformă. Clasa de configurare este responsabilă de bootstrapping MVVMcross și de înregistrarea serviciilor specifice platformei cu containerul IOC. Acest lucru permite modelelor de vizualizare din proiectul de bază să utilizeze funcționalitatea specifică platformei, fără a face referire directă cu API-urile specifice platformei [2] [7].#####. Cadru plugin **
MVVMcross include un cadru de plugin care permite dezvoltatorilor să integreze cu ușurință caracteristicile specifice platformei în aplicațiile lor. Plugin -urile pot oferi funcționalități precum locația GPS, localizarea, senzorii și multe altele. Aceste plugin-uri sunt înregistrate la containerul IOC, permițând modelelor de vizualizare să acceseze funcțiile specifice platformei prin injecție de dependență. Acest cadru acceptă, de asemenea, implementări batjocoritoare în scopuri de testare [4] [11].
5. Motor de legare personalizabil **
MVVMCross oferă un motor de legare personalizabil care permite dezvoltatorilor să creeze legături personalizate pentru vizualizări specifice platformei. Această caracteristică este deosebit de utilă atunci când lucrați cu controale native care nu acceptă mecanisme standard de legare a datelor. Prin definirea legăturilor personalizate, dezvoltatorii se pot asigura că modelele lor de vizualizare sunt conectate corespunzător la vizualizări specifice platformei [4].6. Prezentatori de platformă **
MVVMCross folosește prezentatori specifici platformei (de exemplu, `imvxiosviewpresenter`,` imvxandroidviewpresenter`) pentru a gestiona modul în care vizualizările sunt afișate pe fiecare platformă. Acești prezentatori permit personalizarea logicii de prezentare, permițând dezvoltatorilor să adapteze comportamentul UI la cerințele platformei specifice [3].În rezumat, MVVMCross acceptă codul specific platformei, oferind o abordare structurată pentru separarea logicii de afaceri de implementarea specifică platformei, utilizarea injecției de IOC și dependență pentru gestionarea serviciilor și oferirea de cadre de legare și pluginuri personalizabile pentru integrarea funcțiilor native. Acest lucru permite dezvoltatorilor să maximizeze reutilizarea codului, în timp ce livrează în continuare experiențe de utilizator specifice platformei.
Citări:[1] https://www.suneco.nl/blogs/boost-your-xamarin-native-projects-with-mvvmcross/
[2] https://dev.to/christian1006/creating-cross-platform-xamarin-applications-sing-the-mvmcross-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-speeds-xamarin-development-personalizes-ux/
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://stackoverflow.com/questions/14337063/platform-pecific-ioc-in-mvmcross
[9] https://www.mvvmcross.com/documentation/getting-started/getting-started
[10] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvmcross-framework/
[11] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross