Atribút `[požadovaný]` v C# sa používa na zabezpečenie toho, aby sa vlastnosť musí poskytnúť pri deserializácii údajov, napríklad od JSON. Avšak v kombinácii s neplatnými typmi sa môže zdať kontraintuitívne, pretože neplatné typy môžu byť nulové. Táto kombinácia sa často používa na ochranu pred útokmi na podkladanie, kde škodlivý užívateľ by v žiadosti mohol vynechať vlastnosť, čo spôsobí, že modelové spojivo priradí predvolenú hodnotu namiesto vyvolania chyby [4].
V kontexte MVVMCROSS, ktorý je rámec pre vytváranie turistických aplikácií pomocou modelu-View-ViewModel (MVVM), sa interakcia medzi `[požadovanými]` atribútmi a typmi nulárov nie je priamo riešená. MVVMCross sa primárne zameriava na väzbu a navigáciu údajov medzi zobrazeniami a modelmi. Pochopenie toho, ako fungujú nevylučovateľné typy v C#, však môže vývojárom pomôcť spravovať konzistentnosť a validáciu údajov v rámci ich aplikácií MVVMCross.
Pochopenie neplatných typov
C# 8.0 zaviedli vynulovateľné referenčné typy, ktoré vývojárom umožnili výslovne uviesť, či referenčný typ môže byť null. Táto funkcia pomáha predchádzať nulovým referenčným výnimkám poskytovaním varovaní v čase kompilácie, keď sa hodnoty nuly nevyrieši správne [7]. Pri použití neplatných typov s atribútom `[požadovaného]` atribút zaisťuje, že hodnota je explicitne poskytnutá, zatiaľ čo typ Nullable umožňuje možnosť, aby null bol platným vstupom v určitých scenároch [4].
Používanie [požadovaných] s neplatnými typmi
V scenároch, v ktorých potrebujete presadzovať, aby bola poskytnutá nehnuteľnosť, ale tiež jej umožnila, aby bola nulová (napríklad na spracovanie užitočného zaťaženia JSON, kde by mohla byť vlastnosť výslovne nastavená na nulovú), môže byť prospešná pomocou `[požadovaného]` atribútu s vynulovateľnými typmi. Tento prístup sa však uplatňuje predovšetkým na validáciu údajov vo webových API alebo podobných kontextoch než priamo v rámci MVVMCross.
Pre aplikácie MVVMCross je rozhodujúce zabezpečenie toho, aby boli vlastnosti správne inicializované a overené v rámci modelov zobrazení. Zatiaľ čo MVVMCross neinteraguje priamo s `[požadovaný] atribút jedinečným spôsobom, vývojári môžu využívať vynulovateľné typy referenčných typov C#a atribúty validácie na správu integrity údajov v rámci svojej aplikácie.
Vlastná validácia v MVVMCross
Ak potrebujete presadzovať konkrétne pravidlá validácie v rámci aplikácie MVVMCross, môžete zvážiť implementáciu logiky vlastnej validácie v rámci modelov zobrazenia. Mohlo by to zahŕňať kontrolu nulových hodnôt alebo zabezpečenie toho, aby sa určité vlastnosti naplnili pred pokračovaním v obchodnej logike. MVVMCross poskytuje mechanizmy pre vlastnú väzbu údajov a spracovanie interakcií, ktoré sa môžu použiť na implementáciu takejto validácie [5].
Stručne povedané, zatiaľ čo typy „[požadovaných]“ atribúty a vynulovateľné typy sa používajú primárne v kontextoch validácie údajov, ako sú webové rozhrania API, pochopenie ich interakcie môže pomôcť vývojárom MVVMCROSS spravovať konzistentnosť a validáciu údajov v rámci svojich aplikácií. Samotný MVVMcross však nemá špecifickú vstavanú podporu pre atribút `[požadovaný] atribútom tak, ako by mohli webové rámce.
Citácie:[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxinteraction-is-is-always-null
[2] https://dev.to/theramoliya/c-required-attribute-for-non-nulable-reference-types-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------dequired-and-nulable
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://learn.microsoft.com/en-us/dotnet/csharp/Nulable-references
[7] https://devblogs.microsoft.com/dotnet/embracing-noltable-reference-types/
[8] https://www.reddit.com/r/blazor/comments/14x5krd/Nulable_types_and_required_keyword_how_how_is/