Όταν χρησιμοποιείτε `mvxview` και` mvxviewController` σε mvvmcross, μπορούν να προκύψουν αρκετές κοινές παγίδες. Η κατανόηση αυτών των ζητημάτων μπορεί να βοηθήσει τους προγραμματιστές να τους αποφύγουν και να εξασφαλίσουν ομαλότερη ανάπτυξη.
1. Πληκτρολογήστε προβλήματα μετατροπής **
Ένα κοινό πρόβλημα είναι η μετατροπή τύπου. Στο μοτίβο MVVM, οι ιδιότητες που ορίζονται στο ViewModel ενδέχεται να μην είναι άμεσα αναλώσιμες από το UI. Για παράδειγμα, μια ιδιότητα εικόνας μπορεί να είναι μια συστοιχία byte, αλλά το UI αναμένει ως πηγή εικόνας. Το MVVMCROSS παρέχει τη διεπαφή `imvxvalueconverter 'για να χειριστεί τέτοιες μετατροπές, αλλά απαιτεί χύτευση, η οποία μπορεί να είναι δυσκίνητη. Η γενική κλάση `mvxvalueconverter 'βοηθά επιτρέποντάς σας να καθορίσετε ρητά τους τύπους εισόδου και εξόδου [1].2. Διαχείριση κύκλου ζωής **
Ξεκινώντας από το MVVMCROSS 5.0, τα ViewModels συνδυάζονται με τον κύκλο ζωής της προβολής, παρέχοντας μεθόδους όπως «εμφανίζονται ()», `εμφανίζονται ()`, `Exdmice ()` και `Exdmiced ()`. Ενώ αυτές οι μέθοδοι προσφέρουν μεγαλύτερο έλεγχο στην κατάσταση του ViewModel, δεν είναι 100% αξιόπιστες και μπορούν να επηρεαστούν από συμβάντα ειδικά για την πλατφόρμα ή για λογική εφαρμογής [2] [7]. Η εξασφάλιση της σωστής χειρισμού αυτών των συμβάντων κύκλου ζωής είναι ζωτικής σημασίας.3. Θέματα δέσμευσης **
Μπορούν να προκύψουν ζητήματα δέσμευσης, ειδικά όταν χρησιμοποιείτε προσαρμοσμένες προβολές ή χειριστήρια. Για παράδειγμα, εάν δημιουργηθεί ένας προσαρμοσμένος έλεγχος πριν από τα δεδομένα του ViewModel, το `datacontext` μπορεί να είναι null. Χρησιμοποιώντας το `delaybind` μπορεί να βοηθήσει στην επίλυση αυτού, καθυστερώντας τη δέσμευση μέχρι τα δεδομένα να είναι διαθέσιμα [4].4. Επαναναθεσιμότητα του ViewModels **
Το ViewModels στο MVVMCROSS, ειδικά στο iOS, μπορεί να συνδυαστεί στενά με συγκεκριμένες απόψεις, μειώνοντας την επαναχρησιμοποίησή τους. Αυτό συμβαίνει όταν το ViewModels χειρίζεται τη λογική προβολή προβολής, όπως ετικέτες μορφοποίησης ή ενεργώντας ως πηγές δεδομένων για προβολές πίνακα. Για να αποφευχθεί αυτό, διατηρήστε τα ViewModels που επικεντρώνονται στην επιχειρησιακή λογική και χρησιμοποιήστε μετατροπείς ή άλλους μηχανισμούς για να χειριστείτε τους μετασχηματισμούς που σχετίζονται με την προβολή [3].5. Πλοήγηση για συγκεκριμένη πλατφόρμα **
Το MVVMCROSS υποστηρίζει τη διασταυρούμενη πλατφόρμα πλοήγησης, αλλά κάθε πλατφόρμα έχει μοναδικά πρότυπα παρουσίασης. Στο iOS, για παράδειγμα, η χρήση storyboards για ροή οθόνης μπορεί να έρχεται σε σύγκρουση με την προσέγγιση cross-platform του MVVMCross. Είναι καλύτερο να χειριστείτε τη λογική πλοήγησης στο ViewModel και να χρησιμοποιήσετε τους παρουσιαστές που σχετίζονται με την πλατφόρμα για να διαχειριστείτε τον τρόπο εμφάνισης των προβολών [5] [9].6. Ασφάλεια σύνδεσης **
Το MVVMCross δεν είναι ασφαλές από το Linker, πράγμα που σημαίνει ότι τμήματα του πλαισίου θα μπορούσαν να απομακρυνθούν από τον σύνδεσμο κατά τη διάρκεια της συλλογής. Αυτό μπορεί να οδηγήσει σε σφάλματα χρόνου εκτέλεσης. Για να αποφευχθεί αυτό, πρέπει να υποδείξετε τον σύνδεσμο για να διατηρήσετε τα απαραίτητα τμήματα του πλαισίου [6].Γνωρίζοντας αυτές τις πιθανές παγίδες, οι προγραμματιστές μπορούν να περιηγηθούν καλύτερα στις πολυπλοκότητες της χρήσης των «MVXView» και «MVXViewController» σε εφαρμογές MVVMCross.
Αναφορές:[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/problem-with-binding-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-ophone-and-ipad-best-practices
[9] https://www.mvvmcross.com/documentation/fundamentals/view-presenters