Το χαρακτηριστικό `[απαιτείται]` at a# χρησιμοποιείται για να διασφαλιστεί ότι πρέπει να παρέχεται μια ιδιότητα κατά την αποταμιευτική δεδομένα, όπως από το JSON. Ωστόσο, όταν συνδυάζεται με μηδενικούς τύπους, μπορεί να φαίνεται αντίθετο επειδή οι μηδενικοί τύποι μπορεί να είναι μηδενικοί. Αυτός ο συνδυασμός χρησιμοποιείται συχνά για την προστασία από τις επιθέσεις που υποχωρούν, όπου ένας κακόβουλος χρήστης μπορεί να παραλείψει μια ιδιότητα σε ένα αίτημα, προκαλώντας το συνδετικό μοντέλο να εκχωρήσει μια προεπιλεγμένη τιμή αντί να αυξήσει ένα σφάλμα [4].
Στο πλαίσιο του MVVMCROSS, το οποίο αποτελεί ένα πλαίσιο για την οικοδόμηση εφαρμογών cross-platform χρησιμοποιώντας το πρότυπο μοντέλου-view-viewmodel (MVVM), η αλληλεπίδραση μεταξύ των `imieserg]` χαρακτηριστικών και μηδενισμένων τύπων δεν αντιμετωπίζεται άμεσα. Το MVVMCROSS επικεντρώνεται κυρίως στη δέσμευση δεδομένων και τη πλοήγηση μεταξύ προβολών και μοντέλων προβολής. Ωστόσο, η κατανόηση του τρόπου λειτουργίας των μηδενικών τύπων στο C# μπορεί να βοηθήσει τους προγραμματιστές να διαχειριστούν τη συνέπεια των δεδομένων και την επικύρωση στις εφαρμογές MVVMCross.
Κατανόηση μηδενικών τύπων
Το C# 8.0 εισήγαγε μηδενικούς τύπους αναφοράς, επιτρέποντας στους προγραμματιστές να δείχνουν ρητά εάν ένας τύπος αναφοράς μπορεί να είναι μηδενικός. Αυτή η λειτουργία βοηθά στην πρόληψη των εξαιρέσεων αναφοράς μηδενικής αναφοράς, παρέχοντας προειδοποιήσεις κατά τη μεταγλώττιση όταν οι μηδενικές τιμές δεν αντιμετωπίζονται σωστά [7]. Όταν χρησιμοποιείτε μηδενικούς τύπους με το χαρακτηριστικό `[απαιτούμενο], το χαρακτηριστικό εξασφαλίζει ότι μια τιμή παρέχεται ρητά, ενώ ο μηδενικός τύπος επιτρέπει τη δυνατότητα να είναι μη έγκυρη είσοδος σε ορισμένα σενάρια [4].
Χρήση [Απαιτείται] με μηδενικούς τύπους
Σε σενάρια όπου πρέπει να επιβάλλετε ότι παρέχεται ένα ακίνητο, αλλά και να επιτρέψετε να είναι μηδενική (για παράδειγμα, να χειριστείτε τα ωφέλιμα φορτία JSON όπου ένα ακίνητο μπορεί να ρυθμιστεί ρητά σε μηδενικό), χρησιμοποιώντας το χαρακτηριστικό `[απαιτούμενο]` `` Χαρακτηριστικό με μηδενικά τύπους μπορεί να είναι επωφελής. Ωστόσο, αυτή η προσέγγιση ισχύει κυρίως για την επικύρωση δεδομένων σε API του Web ή παρόμοια πλαίσια και όχι απευθείας στο MVVMCross.
Για τις εφαρμογές MVVMCROSS, η διασφάλιση ότι οι ιδιότητες είναι κατάλληλα αρχικοποιημένες και επικυρωμένες εντός των μοντέλων προβολής είναι ζωτικής σημασίας. Ενώ το MVVMCROSS δεν αλληλεπιδρά άμεσα με το χαρακτηριστικό «απαιτείται] με μοναδικό τρόπο, οι προγραμματιστές μπορούν να αξιοποιήσουν τους τύπους αναφοράς και τα χαρακτηριστικά επικύρωσης του C#και τα χαρακτηριστικά επικύρωσης για τη διαχείριση της ακεραιότητας των δεδομένων σε όλη την εφαρμογή τους.
Προσαρμοσμένη επικύρωση στο MVVMCROSS
Εάν πρέπει να επιβάλλετε συγκεκριμένους κανόνες επικύρωσης εντός μιας εφαρμογής MVVMCROSS, μπορείτε να εξετάσετε την εφαρμογή προσαρμοσμένης λογικής επικύρωσης στα μοντέλα προβολής σας. Αυτό θα μπορούσε να περιλαμβάνει τον έλεγχο των μηδενικών τιμών ή τη διασφάλιση ότι ορισμένες ιδιότητες συμπληρώνονται πριν προχωρήσουν στην επιχειρησιακή λογική. Το MVVMCROSS παρέχει μηχανισμούς για την προσαρμοσμένη δέσμευση δεδομένων και τον χειρισμό αλληλεπίδρασης, οι οποίοι μπορούν να χρησιμοποιηθούν για την εφαρμογή αυτής της επικύρωσης [5].
Συνοπτικά, ενώ οι τύποι `[απαιτούμενα] χαρακτηριστικά και μηδενικά χρησιμοποιούνται κυρίως σε πλαίσια επικύρωσης δεδομένων, όπως τα API ιστού, η κατανόηση της αλληλεπίδρασής τους μπορεί να βοηθήσει τους προγραμματιστές MVVMCross να διαχειριστούν τη συνέπεια και την επικύρωση των δεδομένων στις εφαρμογές τους. Ωστόσο, το ίδιο το MVVMCROSS δεν διαθέτει συγκεκριμένη ενσωματωμένη υποστήριξη για το χαρακτηριστικό `[απαιτούμενο] με τον τρόπο με τον οποίο τα πλαίσια Web θα μπορούσαν.
Αναφορές:[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxinteraction-is-allways-null
[2] https://dev.to/theramoliya/c-required-attribute-for-non-nullable-reference-types-44hb
[3] https://www.reddit.com/r/csharp/comments/10wayn5/required_attribute_and_null_help/
[4] https://stackoverflow.com/questions/43688968/what-does-it-mean-for-a-property-to-be-required-and-nullable
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references
[7] https://devblogs.microsoft.com/dotnet/embracing-nullable-reference-types/
[8] https://www.reddit.com/r/blazor/comments/14x5krd/nullable_types_and_required_keyword_how_is/