Το δείγμα bestsellers στο MVVMCROSS χειρίζεται σφάλματα χρησιμοποιώντας δύο πρωτογενείς τεχνικές:
1. Κλάσεις BaseViewModel για κοινόχρηστο χειρισμό σφαλμάτων: Το δείγμα BestSellers χρησιμοποιεί μια κλάση "BaseViewModel` για την ενσωμάτωση του κοινού κώδικα, συμπεριλαμβανομένων των μηχανισμών χειρισμού σφαλμάτων. Αυτή η προσέγγιση επιτρέπει την κεντρική διαχείριση της κοινής λογικής χειρισμού σφαλμάτων σε διαφορετικά μοντέλα προβολής. Για παράδειγμα, η μέθοδος `generalasyncload` ορίζεται στο` baseviewmodel` και χρησιμοποιείται από διάφορα μοντέλα προβολής για τη φόρτωση δεδομένων ασύγχρονα. Αυτή η μέθοδος μπορεί να περιλαμβάνει λογική χειρισμού σφαλμάτων που μοιράζεται σε όλη την εφαρμογή.
2. Ο δρομολογητής σφάλματος σε επίπεδο εφαρμογής: Το δείγμα χρησιμοποιεί επίσης έναν "δρομολογητή σφάλματος" σε επίπεδο εφαρμογής για να διαχειριστεί τον τρόπο με τον οποίο τα σφάλματα διαδίδονται από μοντέλα προβολής στη διεπαφή χρήστη. Αυτό περιλαμβάνει τη χρήση ενός αντικειμένου που εγχύθηκε, συνήθως ενός `IerrorReporter ', το οποίο αρχικοποιείται ως singleton κατά τη διάρκεια της κατασκευής εφαρμογών. Κάθε ειδικό για την πλατφόρμα UI έχει εγγραφεί σε συμβάντα από αυτό το singleton χρησιμοποιώντας μια διεπαφή `Ierrorsource '. Αυτή η ρύθμιση επιτρέπει στους μηχανισμούς εμφάνισης σφαλμάτων ειδικά για την πλατφόρμα, όπως το UialertViews σε iOS ή τοστ στο Android, επιτρέποντας σε κάθε πλατφόρμα να χειρίζεται σφάλματα με τρόπο που να είναι εγγενής στο περιβάλλον της.
Στην πράξη, όταν εμφανίζεται ένα σφάλμα κατά τη διάρκεια μιας ασύγχρονης λειτουργίας, όπως η φόρτωση δεδομένων από μια υπηρεσία ιστού, το σφάλμα συλλαμβάνεται και αναφέρεται χρησιμοποιώντας το `IerrorReporter '. Αυτό επιτρέπει στην εφαρμογή να εμφανίζει φιλικά προς το χρήστη μηνύματα σφάλματος ή να λαμβάνει εναλλακτικές ενέργειες όπως η επανάληψη της λειτουργίας ή η φόρτωση δεδομένων εκτός σύνδεσης.
Για παράδειγμα, εάν ένα `categoryListViewModel 'συναντά ένα σφάλμα κατά τη φόρτωση κατηγοριών, μπορεί να χρησιμοποιήσει τη μέθοδο` GeneralAsynCload` από τη `baseviewmodel' για να χειριστεί το σφάλμα. Στη συνέχεια, το σφάλμα αναφέρεται μέσω του «IerrorReporter», ο οποίος ενεργοποιεί την κατάλληλη ειδοποίηση UI με βάση την πλατφόρμα.
Αυτή η προσέγγιση εξασφαλίζει ότι η διαχείριση σφαλμάτων είναι τόσο συγκεντρωτικός όσο και ευέλικτος, επιτρέποντας την εύκολη προσαρμογή σε διαφορετικές πλατφόρμες και σενάρια στο πλαίσιο του MVVMCross.
Αναφορές:[1] http://slodge.blogspot.com/2012/05/one-pattern-for-error-handling-in.html
[2] https://leaware.com/creating-cross-platform-xamarin-pplications-using-the-mvmcross-framework/
[3] https://asktom.oracle.com/ords/f?p=100%3A11%3A%3A%3A%3A%3AP11_QUESTION_ID%3A1422998100346727312
[4] https://stackoverflow.com/questions/10411352/what-is-the-suggested-way-to-handle-exceptions-during-in-a-mvmcross-application
[5] https://github.com/mvvmcross/mvvmcross-samples/blob/master/oldsamples/bestsellers/bestsellers.touch/appdelegate.cs
[6] https://discouse.getdbt.com/t/how-to-handle-test-failures/3824
[7] https://www.telerik.com/blogs/blazor-best-practices-handling-errors
[8] https://stackoverflow.com/questions/15697523/running-sample-projects-in-mvvmcross-v3-hot-tuna
[9] https://visualstudiomagazine.com/articles/2018/05/08/build-a-xamarin.forms-application.aspx