Το "MVXConvertingTargetBinding" στο MVVMCROSS έχει σχεδιαστεί για να αποτρέψει τις εξαιρέσεις αναφοράς NULL εφαρμόζοντας διάφορα βασικά χαρακτηριστικά που εξασφαλίζουν τον ισχυρό χειρισμό των μηδενικών τιμών και μετατροπών. Δείτε πώς βοηθά στην πρόληψη τέτοιων εξαιρέσεων:
1. Δομή κλάσης βάσης: `mvxconvertingTargetBinding` κληρονομεί από το` mvxtargetBinding`, το οποίο παρέχει ένα θεμέλιο για τη διαχείριση των δεσμών. Αυτή η κλάση βάσης περιλαμβάνει μηχανισμούς για τη διαχείριση του αντικειμένου στόχου και των συμβάντων χειρισμού, τα οποία περιλαμβάνουν εγγενώς ελέγχους για αναφορές μηδενικών.
2. Αδύναμη στο στόχο: Η κλάση «mvxtargetBinding», από την οποία προέρχεται το «mvxConvertingTargetBinding», χρησιμοποιεί μια «ασθενής» για να κρατήσει το αντικείμενο στόχου. Αυτή η προσέγγιση βοηθά στην πρόληψη διαρροών μνήμης και διασφαλίζει ότι το αντικείμενο στόχου μπορεί να συλλεχθεί σκουπίδια, εάν είναι απαραίτητο. Παρόλο που δεν εμποδίζει άμεσα τις εξαιρέσεις αναφοράς μηδενικών, βοηθά στη διαχείριση της διάρκειας ζωής του αντικειμένου, μειώνοντας την πιθανότητα απροσδόκητων μηδενικών.
3. Οι εικονικές μέθοδοι για την παράλειψη του SetValue: `mvxConvertingTargetBinding` παρέχει εικονικές μεθόδους όπως` sushkipsetValueForViewSpecificReasons () `και` sushkipsetValueForplatformspecificReasons () `. Αυτές οι μέθοδοι επιτρέπουν στους προγραμματιστές να εφαρμόζουν λογική που μπορούν να παραλείψουν τη ρύθμιση μιας τιμής εάν πληρούνται ορισμένες προϋποθέσεις, ενδεχομένως αποφεύγοντας σενάρια όπου οι μηδενικές τιμές ενδέχεται να προκαλέσουν προβλήματα.
4. Υποστήριξη μετατροπέα: Η κύρια λειτουργία του `mvxConvertingTargetBinding` είναι η υποστήριξη των μετατροπέων, οι οποίοι χρησιμοποιούνται για τη μετατροπή των τιμών μεταξύ της πηγής και του στόχου. Ενώ οι ίδιοι οι μετατροπείς δεν αποτρέπουν εγγενώς τις εξαιρέσεις αναφοράς μηδενικών, μπορούν να σχεδιαστούν για να χειρίζονται χαριτωμένα τιμές. Για παράδειγμα, ένας μετατροπέας μπορεί να επιστρέψει μια προεπιλεγμένη τιμή ή μια κενή συμβολοσειρά εάν η είσοδος είναι μηδενική.
5. Χειρισμός συμβάντων: Σε αμφίδρομες δεσμεύσεις, "MVXConvertingTargetBinding" χειρίζεται συμβάντα για να ενημερώσει την πηγή όταν αλλάζει ο στόχος. Εξασφαλίζει ότι οι χειριστές συμβάντων είναι κατάλληλα συνδεδεμένοι και αποσπασμένοι, γεγονός που βοηθά στην πρόληψη των εξαιρέσεων αναφοράς μηδενικής αναφοράς αποφεύγοντας τις προσπάθειες να επικαλεστούν μεθόδους σε μηδενικά αντικείμενα.
6. Αμυντικές πρακτικές προγραμματισμού: Αν και δεν είναι ρητά μέρος της ίδιας της κατηγορίας «MVXConvertingTargetBinding», οι προγραμματιστές που χρησιμοποιούν αυτή την κλάση ενθαρρύνονται να ακολουθούν αμυντικές πρακτικές προγραμματισμού. Αυτό περιλαμβάνει τον έλεγχο των μηδενικών αναφορών πριν προσπαθήσετε να τα χρησιμοποιήσετε, κάτι που είναι ζωτικής σημασίας για την πρόληψη των εξαιρέσεων αναφοράς μηδενικών.
Συνοπτικά, ενώ το `mvxConvertingTargetBinding` δεν εμποδίζει άμεσα τις εξαιρέσεις αναφοράς null μέσω ρητών μηδενικών ελέγχων, παρέχει ένα πλαίσιο που ενθαρρύνει τον ισχυρό χειρισμό των δεσμών και των μετατροπών, μειώνοντας την πιθανότητα τέτοιων εξαιρέσεων. Οι προγραμματιστές θα πρέπει ακόμα να εφαρμόσουν μηδενικούς ελέγχους και αμυντικές πρακτικές προγραμματισμού όταν χρησιμοποιούν αυτήν την κλάση για να εξασφαλίσουν ότι ο κώδικας τους είναι ισχυρός ενάντια στις εξαιρέσεις αναφοράς NULL.
Αναφορές:[1] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[2] http://mcx.space/wiki/index.cgi?doc%2freadMe
[3] https://rubberduckvba.blog/2020/10/25/making-mvvm-work-in-vba-part-3-bindings/
[4] https://blog.postsharp.net/nullreferenceException-object-Reference-not-set
[5] https://www.christianfindlay.com/blog/stop-nullreferenceExceptions
[6] https://github.com/whitphx/vscode-emacs-mcx
[7] https://stackoverflow.com/questions/63497549/binding-onewaytosource-with-onetime-initalization- of target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0