MVVMCross ondersteunt platformspecifieke code via verschillende mechanismen, waardoor ontwikkelaars platformonafhankelijke applicaties kunnen maken en toch gebruik maken van native platformfuncties. Hier is een gedetailleerd overzicht van hoe MVVMCross platformspecifieke code faciliteert:
1. Scheiding van zorgen **
MVVMCross-toepassingen zijn meestal gestructureerd in twee hoofdonderdelen: een kernproject en platformspecifieke UI-projecten. Het kernproject, vaak geïmplementeerd als een Portable Class Library (PCL) of .NET Standard Library, bevat de bedrijfslogica, modellen, weergavemodellen en interfaces voor platformspecifieke services. Deze scheiding zorgt voor maximale code hergebruik over platforms, terwijl het platformspecifieke code wordt geïsoleerd in de UI-projecten [2] [7].2. Inversie van controle (IOC) en afhankelijkheidsinjectie **
MVVMCross gebruikt een IOC -container om afhankelijkheden te beheren. Dit stelt ontwikkelaars in staat om platformspecifieke services in de platformspecifieke projecten te registreren en injecteren in de weergavemodellen van het Core Project. Als een applicatie bijvoorbeeld toegang moet hebben tot de camera, kan het kernproject een interface definiëren voor cameratoegang en kan elk platformspecifiek project zijn eigen implementatie van deze interface bieden. De IOC-container lost deze afhankelijkheden vervolgens op runtime op, zodat de juiste platformspecifieke service wordt gebruikt [2] [8] [11].3. Platformspecifieke services **
Platformspecifieke services worden geïmplementeerd in de native UI-projecten. Deze services zijn geregistreerd in de setup -klasse van elk platformproject. De Setup-klasse is verantwoordelijk voor Bootstrapping MVVMCross en het registreren van platformspecifieke services met de IOC-container. Hierdoor kunnen weergavemodellen in het kernproject platformspecifieke functionaliteit gebruiken zonder direct te verwijzen naar platformspecifieke API's [2] [7].4. plugin framework **
MVVMCross bevat een plug-in framework waarmee ontwikkelaars platformspecifieke functies gemakkelijk in hun applicaties kunnen integreren. Plug -ins kunnen functionaliteiten bieden zoals GPS -locatie, lokalisatie, sensoren en meer. Deze plug-ins zijn geregistreerd met de IOC-container, waardoor weergavemodellen toegang hebben tot platformspecifieke functies door middel van afhankelijkheidsinjectie. Dit framework ondersteunt ook nep -implementaties voor testdoeleinden [4] [11].5. aanpasbare bindingsmotor **
MVVMCross biedt een aanpasbare bindingsmotor waarmee ontwikkelaars aangepaste bindingen kunnen maken voor platformspecifieke weergaven. Deze functie is met name handig bij het werken met native bedieningselementen die geen standaard data -bindingmechanismen ondersteunen. Door aangepaste bindingen te definiëren, kunnen ontwikkelaars ervoor zorgen dat hun weergavemodellen correct zijn aangesloten op platformspecifieke weergaven [4].6. Platformpresentatoren **
MvvmCross uses platform-specific presenters (e.g., `IMvxIosViewPresenter`, `IMvxAndroidViewPresenter`) to manage how views are displayed on each platform. Deze presentatoren maken de aanpassing van de presentatielogica mogelijk, waardoor ontwikkelaars het UI -gedrag kunnen aanpassen aan de vereisten van het specifieke platform [3].Samenvattend ondersteunt MVVMCross platformspecifieke code door een gestructureerde aanpak te bieden voor het scheiden van bedrijfslogica van platformspecifieke implementatie, het gebruik van IOC en afhankelijkheidsinjectie voor servicebeheer en het aanbieden van aanpasbare binding en plug-in frameworks voor het integreren van native functies. Hierdoor kunnen ontwikkelaars het hergebruik van code maximaliseren en tegelijkertijd platformspecifieke gebruikerservaringen leveren.
Citaten:[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-speeds-xamarin-development-personaliseer-ux/
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://stackoverflow.com/questions/14337063/platform-specifiek-ioc-in-mvvmcross
[9] https://www.mvvmcross.com/documentation/getting-started/getting-started
[10] https://lealware.com/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[11] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/window-phone-build-mvvm-apps-with-xamarin-and-mvvmcross