„Reikalingas] atributas C# yra naudojamas siekiant užtikrinti, kad nuosavybė turėtų būti teikiama deserializuojant duomenis, tokius kaip iš JSON. Tačiau, derinant su negaliojančiais tipais, tai gali atrodyti prieštaringai, nes negaliojantys tipai gali būti niekiniai. Šis derinys dažnai naudojamas apsaugoti nuo per mažesnių atakų, kai kenkėjiškas vartotojas gali praleisti nuosavybę užklausoje, todėl modelio segtuvas priskiria numatytąją vertę, užuot padidinęs klaidą [4].
„MVVMCross“ kontekste, kuris yra pagrindas kurti kryžminio platformos programas, naudojant modelio-View-ViewModel (MVVM) modelį, nėra tiesiogiai nagrinėjama sąveika tarp „Reikalingo] atributo ir negaliojančių tipų. „MVVMCross“ daugiausia dėmesio skiria duomenų surišimui ir navigacijai tarp rodinių ir rodinių modelių. Tačiau supratimas, kaip negaliojantys tipai veikia C#, gali padėti kūrėjams valdyti duomenų nuoseklumą ir patvirtinimą savo „MVVMCross“ programose.
supratimas apie negaliojančius tipus
C# 8.0 pristatė panaikinamus atskaitos tipus, leidžiančius kūrėjams aiškiai nurodyti, ar atskaitos tipas gali būti niekinis. Ši funkcija padeda išvengti NULL atskaitos išimčių, pateikiant įspėjimus kompiliavimo metu, kai NULL vertės nėra tinkamai tvarkomos [7]. Naudojant negaliojančius tipus su atributu „Reikalinga]`, atributas užtikrina, kad vertė būtų aiškiai pateikta, o negalima, o negalima, leidžianti nulis būti teisingu įvestimi tam tikruose scenarijuose [4].
naudojant [būtiną] su negaliojančiais tipais
Scenarijuose, kuriuose reikia vykdyti, kad būtų suteikta nuosavybė, tačiau taip pat leiskite jai būti niekiniam (pavyzdžiui, tvarkyti JSON naudingus krovinius ten, kur nuosavybė gali būti aiškiai nustatyta kaip nulinė), naudojant „reikalaujamą]„ atributą su negaliojančiais tipais “gali būti naudinga. Tačiau šis požiūris pirmiausia taikomas duomenų patvirtinimui žiniatinklio API ar panašiuose kontekstuose, o ne tiesiogiai MVVMCROSS.
„MVVMCross“ programoms labai svarbu užtikrinti, kad savybės būtų tinkamai inicijuotos ir patvirtintos per „View“ modelius. Nors „MVVMCross“ tiesiogiai sąveikauja su „reikalaujamu atributu“ unikaliu būdu, kūrėjai gali panaudoti C#panaikinamus nuorodų tipus ir patvirtinimo atributus, kad būtų galima valdyti duomenų vientisumą visoje savo programoje.
Pasirinktinis patvirtinimas „MVVMCross“
Jei jums reikia vykdyti konkrečias patvirtinimo taisykles „MVVMCross“ programoje, galite apsvarstyti galimybę įdiegti pasirinktinę patvirtinimo logiką savo „View“ modeliuose. Tai gali apimti nulinių verčių patikrinimą arba užtikrinimą, kad prieš pradedant verslo logiką tam tikros savybės būtų užpildytos. „MVVMCross“ pateikia pasirinktinių duomenų surišimo ir sąveikos tvarkymo mechanizmus, kurie gali būti naudojami tokiam patvirtinimui įgyvendinti [5].
Apibendrinant galima pasakyti, kad nors „būtini] atributai ir panaikinti tipai pirmiausia naudojami duomenų patvirtinimo kontekste, tokiuose kaip žiniatinklio API, jų sąveikos supratimas gali padėti„ MvVMCross “kūrėjams valdyti duomenų nuoseklumą ir patvirtinimą savo programose. Tačiau pats „MVVMCross“ neturi konkretaus integruoto palaikymo, skirto „reikalaujamam]„ atributui, kuris gali būti toks, kokį gali.
Citatos:[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxinteraction-is-awways-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-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-bullable-reference-types/
[8] https://www.reddit.com/r/blazor/comments/14x5Krd/nullable_types_and_required_keyword_how_is/