Ha a „mvxView` és az„ mvxviewController ”-et használja az MVVMCross -ban, számos közös buktató merülhet fel. Ezeknek a kérdéseknek a megértése segíthet a fejlesztőknek elkerülni őket, és biztosíthatja a simább fejlődést.
1. Írja be a konverziós problémákat **
Az egyik általános probléma a típuskonverzió. Az MVVM mintázatban a ViewModelben meghatározott tulajdonságok nem feltétlenül fogyaszthatják közvetlenül az UI. Például egy képtulajdonság lehet bájt tömb lehet, de a felhasználói felület képforrásként számít. Az MVVMCross biztosítja az „ImvxValueConverter” felületet az ilyen konverziók kezelésére, de ehhez castingot igényel, amely nehézkes lehet. Az általános `mvxValueConverter" osztály segít azáltal, hogy lehetővé teszi a bemeneti és kimeneti típusok kifejezett meghatározását [1].2. Életcikluskezelés **
Az MVVMCross 5.0 -val kezdve a ViewModels a nézet életciklusához kapcsolódik, olyan módszereket biztosítva, mint a „Megjelenés ()”, ”,` megjelenik () `,` eltűnés () `és„ eltűnt () ”. Noha ezek a módszerek nagyobb irányítást kínálnak a ViewModel állapota felett, nem 100% -ban megbízhatóak, és a platformspecifikus események vagy az egyéni alkalmazás logikája befolyásolhatja [2] [7]. Az életciklus -események megfelelő kezelésének biztosítása döntő jelentőségű.3. Kötési kérdések **
Kötési problémák merülhetnek fel, különösen az egyedi nézetek vagy kezelőszervek használatakor. Például, ha egyéni vezérlőt hoznak létre, mielőtt a ViewModel adatai rendelkezésre állnak, akkor a „DataContext” lehet null. A „DeleateBind” használata segíthet ennek megoldásában a kötés késleltetésével, amíg az adatok rendelkezésre állnak [4].4. A ViewModels újrafelhasználhatósága **
A ViewModels az MVVMCross -ban, különösen az iOS -on, szorosan kapcsolódhat a konkrét nézetekhez, csökkentve az újrafelhasználhatóságukat. Ez akkor fordul elő, amikor a ViewModels kezeli a nézet-specifikus logikát, például a címkék formázását vagy a táblázat nézetek adatforrásaként való működését. Ennek elkerülése érdekében tartsa a ViewModels-t az üzleti logikára összpontosítva, és használjon konvertereket vagy más mechanizmusokat a nézet-specifikus transzformációk kezelésére [3].5. Platformspecifikus navigáció **
Az MVVMCross támogatja a platformok közötti navigációt, de minden platformon egyedi prezentációs mintákkal rendelkezik. Az iOS-on például a forgatókönyvek használata a képernyőáramláshoz ellentmondhat az MVVMCross platformok közötti megközelítésének. A legjobb a navigációs logika kezelése a ViewModelben, és a platformspecifikus műsorvezetők használatával a nézetek megjelenítésének kezelésére [5] [9].6. Linker biztonság **
Az MVVMCross nem a linker biztonságos, azaz a keret egyes részeit a linker lecsökkentheti az összeállítás során. Ez futási időbeli hibákhoz vezethet. Ennek megakadályozása érdekében a keret szükséges részeinek megőrzéséhez meg kell tippelnie a linkerre [6].Ha tudatában van ezeknek a potenciális buktatóknak, a fejlesztők jobban navigálhatnak a „mvxview` és az„ mvxviewController ”alkalmazásának összetettségén az MVVMCross alkalmazásokban.
Idézetek:[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-rease/
[3] https://www.danielhall.io/the-problems-with-mvvm-on-ios
[4] https://stackoverflow.com/questions/56531225/problem-with-binding-to-mvxview-with-xamarin-os-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-ipad-best-practices
[9] https://www.mvvmcross.com/documentation/fundamentals/view-presenters