Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon W jaki sposób [wymagany] atrybut oddziałuje z typy zerownymi w API MVVMCROSS


W jaki sposób [wymagany] atrybut oddziałuje z typy zerownymi w API MVVMCROSS


Atrybut „[Wymagany] w C# służy do zapewnienia, że ​​właściwość musi być dostarczona podczas deserializacji danych, takich jak JSON. Jednak w połączeniu z typami zerowymi może wydawać się sprzeczne z intuicją, ponieważ typy zerowe mogą być zerowe. Ta kombinacja jest często stosowana do ochrony przed niedostatecznymi atakami, w których złośliwy użytkownik może pominąć właściwość na żądanie, powodując, że modelu spoiwa przypisuje wartość domyślną zamiast podnoszenia błędu [4].

W kontekście MVVMCROSS, który jest ramą do budowania aplikacji międzyplatformowych za pomocą modelu-View-ViewModel (MVVM), interakcja między typem „wymaganego] atrybutu i null typów nie jest bezpośrednio adresowana. MVVMCROSS koncentruje się przede wszystkim na wiązaniu danych i nawigacji między widokami a modelami widoku. Jednak zrozumienie, w jaki sposób działają typy zerowe w C#, może pomóc programistom zarządzać spójnością danych i walidacją w ich aplikacjach MVVMCROSS.

Zrozumienie zerowych typów

C# 8.0 Wprowadzono zerowe typy referencyjne, umożliwiając programistom jawne wskazanie, czy typ referencyjny może być zerowy. Ta funkcja pomaga zapobiegać zerowym wyjątkom odniesienia, zapewniając ostrzeżenia w czasie kompilacji, gdy wartości zerowe nie są odpowiednio obsługiwane [7]. Podczas korzystania z typów zerowych z atrybutem „[wymaganym] atrybutem zapewnia, że ​​wartość jest jawna, podczas gdy typ zerowy pozwala na możliwość uzyskania prawidłowego wejścia w niektórych scenariuszach [4].

za pomocą [wymaganych] z null typów

W scenariuszach, w których należy egzekwować, że zapewniana jest właściwość, ale także pozwolić, aby była null (na przykład obsługa ładowników JSON, w których właściwość może być wyraźnie ustawiona na NULL), przy użyciu atrybutu „[wymaganego]` z typy zerowymi może być korzystne. Jednak to podejście dotyczy przede wszystkim walidacji danych w interfejsach API Web lub podobnych kontekstach, a nie bezpośrednio w MVVMCROSS.

W przypadku aplikacji MVVMCROSS kluczowe jest zapewnienie, że właściwości są prawidłowe zainicjowane i zatwierdzone w modelach widoku. Podczas gdy MVVMCROSS nie oddziałuje bezpośrednio z atrybutem „[wymaganym]` w unikalny sposób, programiści mogą wykorzystać zerowe typy referencyjne i atrybuty sprawdzania poprawności C#w celu zarządzania integralnością danych w ich aplikacji.

Niestandardowe sprawdzanie poprawności w Mvvmcross

Jeśli chcesz egzekwować określone reguły walidacji w aplikacji MVVMCROSS, możesz rozważyć wdrożenie niestandardowej logiki sprawdzania poprawności w modelach widoku. Może to obejmować sprawdzenie wartości zerowych lub zapewnienie, że niektóre nieruchomości są wypełnione przed kontynuowaniem logiki biznesowej. MVVMCROSS zapewnia mechanizmy niestandardowego wiązania danych i obsługi interakcji, które można wykorzystać do wdrożenia takiej walidacji [5].

Podsumowując, podczas gdy typy „[wymagane]” i zerowe są wykorzystywane przede wszystkim w kontekstach sprawdzania poprawności danych, takich jak interfejsy API, zrozumienie ich interakcji może pomóc programistom MVVMCROSS w zarządzaniu spójnością i walidacją danych w ich aplikacjach. Jednak sam MVVMCROSS nie ma konkretnego wbudowanego wsparcia dla atrybutu „[wymaganego]” w sposób, w jaki mogą być frameworki internetowe.

Cytaty:
[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxinteraction-is-always-null
[2] https://dev.to/theramoliya/c-required-attribute-forn-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-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/