L'attribut `[requis]` en C # est utilisé pour s'assurer qu'une propriété doit être fournie lors de la désérialisation des données, comme de JSON. Cependant, lorsqu'ils sont combinés avec des types nullables, cela peut sembler contre-intuitif car les types nullables peuvent être nuls. Cette combinaison est souvent utilisée pour se protéger contre les attaques sous-publiées, où un utilisateur malveillant peut omettre une propriété dans une demande, ce qui fait que le classeur du modèle attribue une valeur par défaut au lieu d'augmenter une erreur [4].
Dans le contexte de MVVMCross, qui est un cadre de création d'applications multiplateformes à l'aide du modèle Model-View-ViewModel (MVVM), l'interaction entre l'attribut `[requis]` et les types nullables n'est pas directement traité. MVVMCross se concentre principalement sur la liaison des données et la navigation entre les vues et les modèles de vues. Cependant, comprendre comment les types nullables fonctionnent en C # peuvent aider les développeurs à gérer la cohérence et la validation des données dans leurs applications MVVMCross.
Comprendre les types nullables
C # 8.0 a introduit des types de référence nullables, permettant aux développeurs d'indiquer explicitement si un type de référence peut être nul. Cette fonctionnalité aide à prévenir les exceptions de référence NULL en fournissant des avertissements au moment de la compilation lorsque les valeurs nulles ne sont pas gérées correctement [7]. Lorsque vous utilisez des types nullables avec l'attribut `[requis], l'attribut garantit qu'une valeur est explicitement fournie, tandis que le type nullable permet la possibilité que Null soit une entrée valide dans certains scénarios [4].
Utilisation de [requis] avec des types nullables
Dans les scénarios où vous devez appliquer qu'une propriété est fournie, mais lui permettez également d'être nul (par exemple, pour gérer les charges utiles JSON où une propriété peut être explicitement définie sur NULL), en utilisant l'attribut `[requis]` avec des types nullables peut être bénéfique. Cependant, cette approche s'applique principalement à la validation des données dans les API Web ou des contextes similaires plutôt que directement dans MVVMCROSS.
Pour les applications MVVMCross, s'assurer que les propriétés sont correctement initialisées et validées dans les modèles de vue est cruciale. Bien que MVVMCross n'interagit pas directement avec l'attribut `` [requis] `de manière unique, les développeurs peuvent tirer parti des types de référence nullables de C # et des attributs de validation pour gérer l'intégrité des données dans leur application.
Validation personnalisée dans MVVMCROSS
Si vous devez appliquer des règles de validation spécifiques dans une application MVVMCross, vous pouvez envisager d'implémenter la logique de validation personnalisée dans vos modèles de vue. Cela pourrait impliquer de vérifier les valeurs nulles ou de s'assurer que certaines propriétés sont peuplées avant de procéder à la logique métier. MVVMCROSS fournit des mécanismes de liaison des données personnalisés et de manipulation d'interaction, qui peuvent être utilisés pour implémenter une telle validation [5].
En résumé, bien que les types d'attribut `` requis] et nullables soient principalement utilisés dans des contextes de validation des données comme les API Web, la compréhension de leur interaction peut aider les développeurs MVVMCross à gérer la cohérence et la validation des données dans leurs applications. Cependant, MVVMCross lui-même n'a pas de support intégré spécifique pour l'attribut `` [requis] 'dans la façon dont les cadres Web pourraient.
Citations:[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxinteraction-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-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/