Atribut `[požadovaný]` v C# se používá k zajištění toho, aby vlastnost musí být poskytnuta při deserializaci dat, například od JSON. V kombinaci s nulovatelnými typy se však může zdát kontraintuitivní, protože nulové typy mohou být nulové. Tato kombinace se často používá k ochraně před útoky s podáním podávání, kde by škodlivý uživatel mohl vynechat vlastnost na požadavku, což způsobí, že pořadač modelu přiřadí výchozí hodnotu namísto vyvolání chyby [4].
V souvislosti s MVVMCrossem, což je rámec pro vytváření aplikací napříč platformami pomocí modelu-view-viewModel (MVVM) vzoru, není interakce mezi atributy `[požadovaný]` a nullabilní typy přímo řešena. MVVMCross se primárně zaměřuje na vazbu dat a navigaci mezi pohledy a modely pohledu. Pochopení toho, jak fungují nulové typy v C#, však může vývojářům pomoci spravovat konzistenci a ověření dat v jejich aplikacích MVVMCross.
Pochopení nulových typů
C# 8.0 zavedl nulové typy referencí, což vývojářům umožnilo explicitně označit, zda může být referenční typ nulový. Tato funkce pomáhá předcházet nulovým referenčním výjimkám poskytnutím varování v době kompilace, když se nulové hodnoty nejsou správně zpracovány [7]. Při použití nulovatelných typů s atributem `[požadovaný]` zajišťuje, že je hodnota explicitně poskytnuta, zatímco nullabilní typ umožňuje, aby nulový v některých scénářích byl platný vstup [4].
Používání [požadovaných] s nulovatelnými typy
Ve scénářích, kde musíte vynutit, aby je vlastnost poskytnuta, ale také umožňuje, aby byla nulová (například zvládnout užitečná zatížení JSON, kde může být vlastnost explicitně nastavena na NULL), pomocí „[požadovaných]“ atributu s nulovými typy může být prospěšné. Tento přístup se však primárně vztahuje na validaci dat ve webových API nebo podobných kontextech než přímo v rámci MVVMCross.
U aplikací MVVMCross je zásadní zajištění toho, aby vlastnosti byly správně inicializovány a ověřeny v modelech pohledu. Zatímco MVVMCross přímo neinteraguje s atributem `[požadovaný]` jedinečným způsobem, vývojáři mohou využít nulovatelné referenční typy C#a atributy ověření pro správu integrity dat napříč jejich aplikací.
Vlastní ověření v MVVMCross
Pokud potřebujete vynutit konkrétní pravidla ověření v rámci aplikace MVVMCross, můžete zvážit implementaci vlastní logiky ověření v rámci modelů pohledu. To by mohlo zahrnovat kontrolu nulových hodnot nebo zajistit, aby byly určité vlastnosti naplněny před pokračováním v obchodní logice. MVVMCross poskytuje mechanismy pro vlastní vazbu a interakci s údaji, které lze použít k implementaci takové validace [5].
Stručně řečeno, zatímco `[požadované]` atribut a nulové typy se primárně používají v kontextech ověřování dat, jako jsou webová API, porozumění jejich interakci může pomoci vývojářům MVVMCross spravovat konzistenci a ověření dat v rámci jejich aplikací. Samotný MVVMCross však nemá konkrétní vestavěnou podporu pro atribut `[požadovaný]` ve způsobu, jakým by webové rámce mohly.
Citace:[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxInter-is-always-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-Te-Mean-for-a-property-to-be-Required-and-Nevable
[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/