Les attributs nullables dans le contexte de MVVMCross, ou de tout cadre MVVM, sont bénéfiques dans plusieurs scénarios spécifiques. Ces attributs aident à clarifier l'intention de votre code, le rendant plus compréhensible et moins ambigu. Voici quelques scénarios détaillés où les attributs nullables sont particulièrement bénéfiques:
1. Empêcher les exceptions de référence nuls **
Dans MVVMCross, comme avec d'autres frameworks, l'utilisation de types de référence nullables aide à prévenir les exceptions de référence nulles. En marquant explicitement les types de référence comme nullables, les développeurs sont obligés de vérifier Null avant d'accéder à des propriétés ou des méthodes, en réduisant le risque d'erreurs d'exécution. Ceci est particulièrement important dans le développement multiplateforme où différentes plates-formes peuvent gérer les NULL différemment.
2. Exprimer l'intention et réduire l'ambiguïté **
Les attributs nullables rendent le code plus expressif en indiquant clairement si un paramètre de propriété ou de méthode peut être nul. Cette clarté est cruciale dans les cadres MVVM où la liaison des données et les changements de propriété sont courants. Par exemple, si une propriété est marquée comme nullable, il transmet immédiatement qu'il n'a pas toujours de valeur, guidant d'autres développeurs sur la façon de le gérer.
3. Amélioration de la liaison des données **
Dans MVVMCross, la liaison des données est une caractéristique centrale. Les attributs nullables peuvent aider à garantir que les opérations de liaison des données sont plus sûres et plus prévisibles. Si une propriété est nullable, le cadre et les autres développeurs sauront le gérer de manière appropriée, en évitant les valeurs nulles inattendues pendant la liaison des données.
4. Améliorer la documentation et l'utilisation de l'API **
Lorsque vous utilisez des attributs nullables dans les API MVVMCross, il devient plus clair pour les utilisateurs de ces API comment ils doivent être utilisés. Par exemple, si un paramètre de méthode est marqué comme nullable, il indique que le passage nul est un scénario valide, qui peut affecter le comportement de la méthode. Cette clarté aide à prévenir une mauvaise utilisation et réduit la nécessité d'une documentation approfondie sur la manipulation nul.
5. Protéger contre les attaques sous-estimées **
Semblable au concept dans les applications Web, les attributs nullables peuvent se protéger contre les scénarios où les données peuvent être omises intentionnellement ou non. Dans MVVMCross, si une propriété est nullable et requise, elle garantit que le cadre valide sa présence, empêchant les valeurs par défaut inattendues d'être utilisées.
6. Migration vers les types de référence nullables **
Comme C # évolue avec des fonctionnalités telles que les types de référence nullables, des cadres comme MVVMCross s'adaptent en incorporant des attributs nullables dans leurs API. Cette transition aide les développeurs à migrer leurs projets à utiliser plus efficacement les types de référence nullables, garantissant une meilleure sécurité nul et réduisant les erreurs d'exécution.
En résumé, les attributs nullables dans MVVMCROSS sont bénéfiques pour améliorer la clarté du code, empêcher les exceptions de référence nul, améliorer la sécurité de liaison des données et guider l'utilisation de l'API. Ils jouent également un rôle crucial dans l'adaptation aux fonctionnalités C # modernes comme les types de référence nullables.
Citations:[1] https://stackoverflow.com/questions/43688968/what-does-it-mean-for-a-property-to-be-required-and-nullable
[2] https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references
[3] https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/attributes/nullable-analysis
[4] https://xebia.com/blog/start-dealing-with-nullable-reference-types/
[5] https://www.mvvmcross.com/mvvmcross-8.0.0-release/
[6] https://stackoverflow.com/questions/52351636/mvvmcross-viewmodel-is-always-null-in-xamarin-android-but-it-is-accessible-in-xa
[7] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[8] https://github.com/mvvmcross/mvvmcross