Meilleures pratiques pour les conventions de dénomination de l’interface graphique C #?

Les interfaces graphiques, qu’elles soient écrites dans WinForms ou XAML, semblent avoir les conventions de dénomination les plus différentes entre les projets que je vois. Pour une simple zone de TextBox pour le nom d’une personne, j’ai vu différentes conventions de nommage:

 TextBox tbName // Hungarian notation TextBox txtName // Alternative Hungarian TextBox NameTextBox // Not even camelCase TextBox nameTextBox // Field after field with TextBox on the end TextBox TextBoxName // Suggested in an answer... TextBox textBoxName // Suggested in an answer... TextBox uxName // Suggested in an answer... TextBox name // Deceptive since you need name.Text to get the real value TextBox textBox1 // Default name, as bad as you can get 

Je respecte les règles StyleCop pour tous mes fichiers .cs normalement, et les autres le font également, mais l’interface graphique a tendance à enfreindre ces règles ou à varier considérablement. Je n’ai vu aucune directive de Microsoft qui fait spécifiquement référence aux éléments de l’interface graphique au lieu des seules variables normales, ni même aux exemples qui s’appliqueraient en dehors d’une application de la console.

Quelles sont les meilleures pratiques pour nommer des éléments dans une interface graphique?

J’utilise l’ancienne école hongroise … txt pour TextBox, btn pour Button, suivi d’un mot généralisé, puis d’un mot plus spécifique. c’est à dire:

btnUserEmail

Beaucoup de gens ont dit des choses comme “omg c’est si vieux, appel VB6!” Mais dans une application winforms UI Rich, je peux trouver et modifier les choses plus rapidement car généralement, la première chose que vous savez sur un contrôle est son type, sa catégorie, puis sa spécificité. Alors que la convention de nommage de style plus récent les gars sont bloqués en essayant de se rappeler ce qu’ils ont appelé cette zone de texte.

J’utilise:

 TextBox nameTextBox; 

Tout comme je voudrais utiliser:

 MailAddress homeAddress; 

La raison en est que dans ces cas, “TextBox” et “Address” sont descriptifs de ce que représente l’object, pas de la manière dont il est stocké ou utilisé. Mais dans un autre cas, comme stocker le nom complet d’une personne, j’utiliserais:

 ssortingng fullName; 

Ne pas:

 ssortingng fullNameSsortingng; 

Parce que “Ssortingng” n’est pas descriptif de ce que l’object représente, mais seulement comment il est stocké.

Même convention que tout le rest dans .NET: nom descriptif du cas camel uniquement, éventuellement suivi d’un suffixe si vous devez distinguer différentes classes pour la même “chose” logique. Par exemple:

 ssortingng name; // a name TextBox nameText; // the control used to edit the name Label nameLabel; // the control used to label the edit control List nameList; // a list of names 

et ainsi de suite à l’infini. Peu importe les suffixes, ils sont cohérents et descriptifs.

Ce n’est pas mon invention, mais je l’aime bien:

 TextBox uxName = new TextBox(); Label uxNameLabel = new Label(); Button uxAccept = new Button(); 

Je préfère cela à la notation hongroise puisque tous mes contrôles d’interface utilisateur apparaissent dans un bloc dans intelisense. UX pour “User eXperience”. C’est aussi bien si vous changez un contrôle d’une zone de texte en une liste déroulante ou quelque chose, car le nom ne changera pas.

La chose la plus importante à propos des conventions de dénomination est de choisir quelque chose qui a du sens, d’obtenir un consensus de toutes les parties et de s’y tenir comme si votre vie en dépendait.

En ce qui concerne la convention à utiliser, je voterais pour celle-ci:

 TextBox name 

Il est court et a une valeur sémantique comme identifiant. En ce qui concerne le type de l’identifiant, je me fierais à Visual Studio pour vous dire que cela a tendance à être bon dans ce genre de chose.

Je souhaite que quelqu’un devienne l’autorité à ce sujet et le dise simplement comme il est, et commence à l’appliquer … Le pire pour moi, c’est quand les gens le mélangent dans la même application ou pire encore, même classe.

J’ai vu des trucs assez horribles avec txtName, NameTextBox, name et textBox1 tous utilisés sur la même forme … beurk.

Là où je travaille, nous avons un document sur les normes qui nous dit comment le faire, où le faire et je pense que seulement 20% des gens se soucient même d’essayer de se conformer.

Je changerai habituellement quelque chose si Fxcop me crie dessus.

http://en.wikipedia.org/wiki/Naming_conventions_%28programming%29

Styles de capitalisation

Notez que: Microsoft .NET recommande UpperCamelCase (aka “Pascal Style”) pour la plupart des identifiants. (lowerCamelCase est recommandé pour les parameters).

J’utilise la notation Hungation avec une petite différence.

Je travaille maintenant sur un projet qui a une interface utilisateur assez riche. Donc, trouver avec Intellisense un bouton appelé, disons, btnGetUsers, c’est très simple.

Les choses se compliquent lorsque l’application est capable d’obtenir des utilisateurs de différents endroits. C’est des contrôles différents. J’ai donc commencé à nommer mes contrôles après leur emplacement et à utiliser la notation hongroise.

Par exemple: tabSchedAddSchedTxbAdress signifie que txbAddress est une zone de texte dans laquelle une adresse peut être insérée et se trouve sous l’onglet Ajouter une planification à partir du contrôle de l’onglet Planification. De cette façon, je peux trouver des commandes très faciles et, quand je tape simplement “btn”, je ne reçois pas immédiatement beaucoup de boutons de toute l’interface utilisateur.

Bien sûr, c’est juste pour m’aider. Je ne suis pas au courant d’une telle pratique exemplaire. Cependant, cela aide beaucoup.

Mosu ‘

Je nomme tous mes éléments d’interface utilisateur TypeDescriptor. Suivant votre exemple, TextBoxName .

Je travaille avec une équipe qui vient de passer de MFC (6.0 …). Là ils auraient quelque chose comme

 CSsortingng Name; CEdit ctlName; 

La façon la plus simple de migrer a été d’utiliser quelque chose comme

 TextBox ctlName 

Il suffit juste de rappeler que la variable est le contrôle et non la valeur du contrôle.

Je pense qu’inclure le type en tant que partie du nom est juste OLD.

– modifier – Un autre avantage est que tous les contrôles sont regroupés lors de la navigation. Si le type réel était utilisé, les contrôles ComboBox seraient assez éloignés des contrôles TextBox.

J’ai tendance à utiliser c_typeName (veuillez noter que le type et le nom sont différents), par exemple c_tbUserEmail pour un TextBox dans lequel l’utilisateur doit taper son courrier électronique. Je trouve cela utile parce que quand il ya beaucoup de contrôles, il peut être difficile de les trouver dans la liste intellisense de miles, donc en ajoutant le préfixe c_, je peux facilement voir tous les contrôles de cette forme.

Cette folie hongroise / nommée VB6 doit s’arrêter.

Si Microsoft voulait vraiment que vous nommiez vos contrôles en fonction de leur type, alors pourquoi Visual Studio n’adhère-t-il pas automatiquement le «txt» ou le «btn» lorsque vous ajoutez le contrôle à votre formulaire Web / win?

J’utilise la notation hongroise, ce qui facilite la recherche de contrôles dans les grandes pages.

Pour les éléments que je ne compte pas utiliser dans mon code, je laisse simplement le concepteur le gérer pour moi; si elles deviennent quelque chose utilisé dans mon code, elles deviennent quelque chose de significatif et cela se trouve être descriptionType (nameTextBox). C’est comment le concepteur les crée si on leur donne suffisamment d’informations (consultez les éléments du menu – “Quitter” devient exitMenuItem).

Ma propre pratique est la suivante: Tapez _contextDescriptionType. Par exemple:

 TextBox _searchValueTextBox 

Quoi qu’il en soit, la convention de dénomination est trop personnelle ou imposée par des règles générales. Dans tous les cas, il devrait être documenté quelque part afin que tous les développeurs de projets puissent y accéder facilement.

Vous avez les directives pour les noms de Microsoft. Je ne suis pas tout suivre, mais c’est un bon sharepoint départ

Je crois qu’il existe une convention de nommage pour faciliter les efforts de codage des développeurs et faciliter la gestion. A ma connaissance, tout nom utile pour un access facile doit être suivi.

J’ai vu le nombre de commentaires avec une approche différente, mais le meilleur que j’ai trouvé dans mes projets est de préfixer le nom du premier trois du contrôle. Il y a beaucoup de raisons de suivre cette approche.

  1. Intellisense rassemblerait tous les mêmes types.
  2. Les fenêtres de propriétés de formulaire afficheraient également tous les mêmes contrôles sortingés
  3. Sur les formulaires complexes, vous pouvez facilement identifier les étiquettes ou les textbox (par exemple, lblAccounts et txtAccounts).
  4. Un nouvel utilisateur peut facilement gérer le codage.
  5. Imaginez que j’ai des contrôles accountLst, accountlbl, accounttxt, accountgrd, accountChk sur le même formulaire.

Lors du codage, un développeur sait toujours qu’il accède à une zone de texte ou à une étiquette. Où il n’est pas clair avec quel nom le développeur a utilisé. Donc, en écrivant simplement “lbl” intellisens apporterait toute la liste d’étiquettes à choisir, où est-ce si vous avez utilisé l’approche utilisée dans # 5 alors intellisense apporterait tous les contrôles en utilisant acc. J’ai rarement vu faire une boucle avec un nom de contrôle commençant par “account” ou plus. Cela signifie qu’il ne serait d’aucun secours dans un incident rare.

Mon pari est de faire des choses qui aident à comprendre le code facilement pour les autres développeurs. Comme vous grandissez dans votre transporteur, vous ne feriez pas toujours du codage, une autre personne viendrait et prendrait votre place.

Le choix est à vous, comme vous voulez!

S’il y a une bonne séparation des préoccupations dans une conception d’application, je suppose qu’il ne sera pas nécessaire de nommer les boutons comme LoginButton, LoginBtn ou btnLogin. Si le propriétaire de l’object est un élément d’interface utilisateur, appelons-le donc Login et si le propriétaire n’est pas un élément d’interface utilisateur, l’object se trouve au mauvais endroit.