Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Comprendre les Field Modifiers dans XAML pour MAUI

Les Field Modifiers sont des attributs XAML utilisés pour spécifier le niveau d'accès des éléments déclarés dans un fichier XAML. 
Cela ressemble au concept de x:FieldModifier présent dans Xamarin.Forms. Mais soyons francs, peu de gens utilisent cette option de XAML. Pourtant cela peut avoir parfois du sens.

Car en fonction du Field Modifier appliqué, vous pouvez contrôler la visibilité des éléments XAML dans le code-behind de votre page ou dans d'autres parties de votre application. On parle bien ici de "visibilité" technique et non visuelle. Cela fonctionne comme les modifiers dans les classes ou les propriétés en C#. Les valeurs valides pour un Field Modifier sont :

- Private : Accessibilité limitée au corps de la classe dans laquelle l'élément est déclaré.
- Public : Accessibilité totale, accessible depuis n'importe quelle classe.
- Protected : Accessibilité limitée à la classe et à ses dérivées.
- Internal : Accessibilité limitée aux types définis dans la même assembly.
- NotPublic : Identique à Internal (mais certainement plus cool à utiliser, personne ne connait !)

Si aucun Field Modifier n'est spécifié, la valeur par défaut est Private.

On notera que les Field Modifiers ne sont applicables qu'aux éléments portant un nom.

Fun Fact : Le casing des Field Modifiers est totalement libre ce qui est très rare sous XAML ! Vous pouvez ainsi écrire internal, PRIVATE ou Notpublic, tout cela marchera car le compilateur XAML transformera le modificateur en minuscules... Amusant et exotique, comme le reste pour cette feature !

Exemple de Code avec Field Modifiers

Voici un exemple simple illustrant l'utilisation des Field Modifiers dans un projet MAUI :


<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyApp.MainPage">
 
  <!-- Cet élément sera accessible publiquement -->
  <Label x:Name="PublicLabel" x:FieldModifier="Public" Text="Hello, World!" />

  <!-- Cet élément ne sera accessible que dans cette classe -->
  <Button x:Name="PrivateButton" Text="Click Me" />
</ContentPage>

Cas d'utilisation des Field Modifiers

Meilleure Encapsulation

Les Field Modifiers permettent de mieux encapsuler le code en limitant l'accès aux éléments XAML aux seuls endroits où cela est nécessaire. Par exemple, si un élément n'est utilisé que dans la page où il est déclaré, il est préférable de le laisser privé pour éviter toute modification accidentelle depuis d'autres classes.

Sécurité et Maintenance du Code

En limitant la visibilité des éléments XAML, vous augmentez la sécurité de votre application et facilitez sa maintenance. Les développeurs peuvent mieux contrôler quelles parties de l'interface utilisateur peuvent être modifiées ou accédées, réduisant ainsi le risque d'erreurs ou d'effets secondaires indésirables.

Interopérabilité entre Pages

Dans certains cas, vous pourriez vouloir qu'un élément XAML soit accessible depuis plusieurs pages, par exemple, pour partager des données ou des états entre différents écrans de l'application. Dans ce cas, l'utilisation de Public ou Internal comme Field Modifier est appropriée.

Curiosité ou réelle utilité ?

C'est malgré tout la question qu'on peut se poser. C'est un ajout spécifique des Xamarin.Forms qui a été repris dans MAUI, les autres XAML n'offrent pas cette option à ma connaissance.

Bien que j'aie souligné précédemment les avantages de ces modificateurs, il est vrai que leurs cas d'utilisation paraissent limités. Le fait qu'ils ne s'appliquent qu'à des éléments nommés (x:Name) en est une indication. Dans XAML, et particulièrement avec le modèle MVVM, nommer un élément visuel est extrêmement rare. Le binding élimine le besoin de nommer un élément. L'unique situation où c'est nécessaire, c'est pour créer un x:Reference pour un Binding complexe sur un autre élément de la page, ce qui reste un usage assez restreint.

En outre, le nommage qui n'est pas courant en XAML et le fait qu'il puisse permettre à des pages d'accéder au contenu visuel d'autres pages me paraît douteux. Je ne perçois pas l'utilité pratique, sauf pour créer délibérément du code spaghetti. Pour des ContentView créant des contrôles personnalisés, cela pourrait empêcher l'exploitation de certaines parties nommées. Cependant, il est difficile d'imaginer un cas pratique nécessitant une telle protection.

Cela peut paraître étrange, mais c'est dans la boîte. Si vous recherchez un sujet de conversation qui rendra vos collègues sans voix à la machine à café demain, n'hésitez pas, c'est fait pour cela !

Conclusion

Les Field Modifiers dans MAUI sont des outils intéressants mais curieux pour contrôler l'accessibilité des éléments XAML et améliorer la structure et la sécurité de votre code. En comprenant comment et quand les utiliser, vous pouvez créer des applications plus robustes et maintenables. Reste à trouver les cas d'utilisation où cela s'impose. Les commentaires sont ouverts, j'attends vos idées !

Pour plus de détails sur les Field Modifiers et d'autres fonctionnalités XAML dans MAUI, je vous invite à consulter la documentation officielle de Microsoft.

Stay Tuned !

Faites des heureux, PARTAGEZ l'article !