Kai naudojama „Mvxview“ ir „MvxviewController“ „Mvvmcross“, gali atsirasti keletas įprastų spąstų. Suprasti šias problemas gali padėti kūrėjams jų išvengti ir užtikrinti sklandesnę plėtrą.
1. Tipo konversijos problemos **
Viena dažna problema yra tipo konversija. MVVM modelyje „ViewModel“ apibrėžtos savybės gali būti tiesiogiai naudojamos UI. Pvz., Vaizdo ypatybė gali būti baitų masyvas, tačiau vartotojo sąsaja to tikisi kaip vaizdo šaltinis. „MVVMCross“ pateikia „imvxValueConverter“ sąsają, kad galėtų tvarkyti tokias konversijas, tačiau tam reikia liejimo, kuris gali būti sudėtingas. Bendroji „MVXValueConverter“ klasė padeda, nes leidžia aiškiai nurodyti įvesties ir išvesties tipus [1].2. Gyvenimo ciklo valdymas **
Pradedant nuo MVVMCROSS 5.0, „ViewModels“ yra sujungti su vaizdinio gyvavimo ciklu, pateikdami tokius metodus kaip „pasirodyti ()“, „pasirodyti ()“, „dingusi ()“ ir „dingti ()“. Nors šie metodai labiau kontroliuoja „ViewModel“ būseną, jie nėra 100% patikimi ir gali būti paveikti konkrečių platformos įvykių ar pasirinktinės programos logikos [2] [7]. Labai svarbu užtikrinti tinkamą šių gyvenimo ciklo įvykių tvarkymą.3. Įrišimo problemos **
Gali kilti įrišimo problemų, ypač naudojant pasirinktinius rodinius ar valdiklius. Pavyzdžiui, jei prieš „ViewModel“ duomenis sukuriamas pasirinktinis valdymas, „DataContext“ gali būti niekinis. Naudojant „delsiaBind“ gali padėti tai išspręsti, atidedant įrišimą, kol bus gauti duomenys [4].4. „ViewModels“ pakartotinis panaudojimas **
„Viewmodels“ MVVMCROSS, ypač „iOS“, gali būti glaudžiai sujungti su konkrečiais vaizdais, sumažindami jų pakartotinį naudojimą. Tai atsitinka, kai „ViewModels“ tvarko konkrečios peržiūrai būdingą logiką, tokią kaip etikečių formatavimas arba veikimas kaip duomenų šaltiniai lentelės rodiniams. Norėdami to išvengti, naudokite „ViewModels“, orientuotą į verslo logiką ir naudokite keitiklius ar kitus mechanizmus, kad galėtumėte tvarkyti konkrečius vaizdams skirtus transformacijas [3].5. Konkrečios platformos navigacija **
„MVVMCross“ palaiko kryžminio platformos naršymą, tačiau kiekviena platforma turi unikalius pateikimo modelius. Pvz., „IOS“, naudodamiesi siužetinėmis lentelėmis ekrano srautui, gali būti prieštaraujama „MVVMCross“ kryžminio platformos metodui. Geriausia tvarkyti navigacijos logiką „ViewModel“ ir naudoti konkrečias platformos vedėjus, kad būtų galima valdyti, kaip rodomi rodiniai [5] [9].6. „Linker Safety“ **
„MVVMCross“ nėra saugus „Linker“, tai reiškia, kad kompiliavimo metu „Linker“ gali būti pašalintos sistemos dalys. Tai gali sukelti vykdymo laiko klaidas. Norėdami to išvengti, turite užsiminti apie nuorodą, kad išsaugotumėte būtinas sistemos dalis [6].Sužinoję šias galimas spąstus, kūrėjai gali geriau naršyti „MVXView“ ir „MVXViewController“ naudojimo sudėtingumą „MVVMCross“ programose.
Citatos:[1] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/August/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[2] https://www.mvvmcross.com/mvvmcross-5-release/
[3] https://www.danielhall.io/the-problems-with-mvvm-on-ios
[4] https://stackoverflow.com/questions/56531225/prlemlem-with-ding-to-mvxview-with-xamarin-ios-and-mvvmcross
[5] https://kerry.lothrop.de/ios-ui-with-mvvmcross/
[6] https://github.com/mvvmcross/mvvmcross/issues/4286
[7] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[8] https://stackoverflow.com/questions/45966067/mvvmcross-iphone-and-pad-best-praktices
[9] https://www.mvvmcross.com/documentation/fundamentals/view-presenters