„MVVMCross“ palaiko konkrečios platformos kodą keliais mechanizmais, leidžiančiais kūrėjams kurti įvairių platformų programas, tuo pačiu vis dar panaudojant vietinių platformos funkcijas. Čia pateikiama išsami apžvalga, kaip „MVVMCross“ palengvina konkrečios platformos kodą:
1. Susirūpinimo atskyrimas **
„MVVMCross“ programos paprastai yra suskirstytos į dvi pagrindines dalis: pagrindinius projekto ir platformos UI projektus. Pagrindinis projektas, dažnai įgyvendintas kaip nešiojama klasės biblioteka (PCL) arba .NET standartinė biblioteka, yra verslo logika, modeliai, peržiūros modeliai ir sąsajos, skirtos platformai skirtose paslaugos. Šis atskyrimas leidžia maksimalų pakartotinį kodą naudoti visose platformose, išlaikant konkrečios platformos kodą, išskirtą UI projektuose [2] [7].2. Kontrolės inversija (IOC) ir priklausomybės injekcija **
„MVVMCross“ priklausomybėms valdyti naudoja IOC konteinerį. Tai leidžia kūrėjams registruoti konkrečias platformai skirtas paslaugas konkrečioms platformos projektams ir sušvirkšti juos į pagrindinio projekto vaizdų modelius. Pvz., Jei programai reikia pasiekti fotoaparatą, pagrindinis projektas gali apibrėžti prieigos prie fotoaparato sąsają, o kiekvienas konkrečiam platformai skirtas projektas gali pateikti savo įdiegimą šią sąsają. Tada IOC konteineris išsprendžia šias priklausomybes vykdymo metu, užtikrinant, kad būtų naudojama teisinga platformos paslauga [2] [8] [11].3. Konkrečios platformos paslaugos **
Konkrečios platformos paslaugos įgyvendinamos vietiniuose UI projektuose. Šios paslaugos yra įregistruotos kiekvieno platformos projekto sąrankos klasėje. Sąrankos klasė yra atsakinga už „MVVMCross“ įkrovos ir registravimo platformai skirtas paslaugas naudojant IOC konteinerį. Tai leidžia peržiūrėti pagrindinio projekto modelius naudoti konkrečios platformos funkcijoms, tiesiogiai nenurodant konkrečios platformos API [2] [7].4. Papildinio sistema **
„MVVMCross“ apima papildinio sistemą, leidžiančią kūrėjams lengvai integruoti konkrečias platformos funkcijas į savo programas. Papildiniai gali suteikti tokias funkcijas kaip GPS vieta, lokalizacija, jutikliai ir dar daugiau. Šie papildiniai yra užregistruoti IOC konteineryje, leidžiant „View“ modeliams pasiekti konkrečias platformos funkcijas per priklausomybės injekciją. Ši sistema taip pat palaiko pavyzdžių įgyvendinimus testavimo tikslais [4] [11].5. Tinkamas įrišimo variklis **
„MVVMCross“ pateikia pritaikomą įrišimo variklį, leidžiantį kūrėjams kurti pasirinktinius įrišimus konkrečioms platformos rodiniams. Ši funkcija yra ypač naudinga dirbant su vietiniais valdikliais, kurie nepalaiko standartinių duomenų surišimo mechanizmų. Apibrėždami pasirinktinius įrišimus, kūrėjai gali užtikrinti, kad jų vaizdo modeliai būtų tinkamai prijungti prie konkrečių platformos rodinių [4].6. Platformos pranešėjai **
„MVVMCross“ naudoja konkrečiai platformai skirtus pranešėjus (pvz., „IMVXIOSViewPresenter“, „IMVXandroidViewPresenter“), kad būtų galima valdyti, kaip rodomi kiekvienoje platformoje. Šie pranešėjai leidžia pritaikyti pristatymo logiką, leidžiančią kūrėjams pritaikyti UI elgesį prie konkrečios platformos reikalavimų [3].Apibendrinant galima pasakyti, kad „MVVMCross“ palaiko konkrečios platformos kodą, pateikdamas struktūrizuotą požiūrį į verslo logikos atskyrimą nuo konkrečios platformos diegimo, pasitelkimo IOC ir priklausomybės injekcijos, skirtos paslaugų valdymui, ir siūlo pritaikomus įrišimo ir papildinių sistemas, skirtas integruoti vietines funkcijas. Tai leidžia kūrėjams maksimaliai padidinti kodo pakartotinį naudojimą, tuo pačiu vis dar teikiant konkrečios platformos vartotojų patirtį.
Citatos:[1] https://www.suneco.nl/blogs/boost-your-xamarin-native-projects-with-mvvmcross/
[2] https://dev.to/christian1006/creating-cross-platform-xamarin-application-sing-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-Deads-xamarin-development-Personalizes-ux/
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://stackoverflow.com/questions/14337063/platform-precific-ioc-in-mvvmcross
[9] https://www.mvvmcross.com/documentation/getting-started/getting-started
[10] https://leaware.com/creating-cross-platform-xamarin-application-sing-the-mvvmcross-framework/
[11] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/August/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross