¿Mejores prácticas para las convenciones de nomenclatura GUI de C#? [cerrado]


Las GUI, ya sean escritas en WinForms o XAML, parecen tener las convenciones de nomenclatura más diferentes entre los proyectos que veo. Para un simple TextBox para el nombre de una persona, he visto varias convenciones de nomenclatura:

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

Me atengo a las reglas de StyleCop para todos mis .los archivos cs normalmente, y ver que otros también lo hacen, pero la GUI tiende a romper estas reglas o variar enormemente. No he visto ninguna guía de Microsoft que se refiera específicamente a elementos GUI en lugar de solo variables normales, o incluso ejemplos que se aplicarían fuera de una aplicación de consola.

¿Cuáles son las mejores prácticas para nombrar elementos en una GUI?

Author: ErikE, 2009-08-07

17 answers

Uso el húngaro de la vieja escuela... txt para cuadro de texto, btn para Botón, seguido de una palabra generalizada, luego una palabra más específica. es decir:

BtnUserEmail

Han tenido un montón de gente decir cosas como "omg eso es tan viejo, VB6 llamando!" Pero en una aplicación de winforms rica en UI, puedo encontrar y modificar las cosas más rápido porque generalmente lo primero que sabes sobre un control es su tipo, luego su categoría y luego ser específico. Mientras que los chicos de la convención de nomenclatura de estilo más reciente están atascados tratando de recordar cómo llamaron a ese cuadro de texto.

 69
Author: Neil N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-09 15:39:01

Utilizo:

TextBox nameTextBox;

Justo como yo usaría:

MailAddress homeAddress;

La razón de esto es que en estos casos "TextBox" y "Address" es descriptivo de lo que representa el objeto, no de cómo se almacena o utiliza. Pero en otro caso, como almacenar el nombre completo de una persona, usaría:

string fullName;

No:

string fullNameString;

Porque "String" no es descriptivo de lo que representa el objeto, sino solo de cómo se almacena.

 26
Author: Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 19:50:59

La misma convención que todo lo demás en.NET: camel case descriptive name only, opcionalmente seguido de un sufijo si necesita distinguir diferentes clases para la misma "cosa"lógica. Por ejemplo:

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

Y así sucesivamente hasta el infinito. Realmente no importa cuáles sean los sufijos, siempre y cuando sean consistentes y descriptivos.

 11
Author: Christian Hayter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 20:02:34

Este no es mi invento, pero me gusta:

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

Prefiero esto a la notación húngara ya que todos mis controles de interfaz de usuario se muestran en un bloque en intelisense. UX para "Experiencia de usuario". También es bueno si cambias un control de un cuadro de texto a un combobox o algo así, ya que el nombre no cambiará.

 8
Author: Brandon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 20:23:13

Lo más importante de las convenciones de nombres es elegir algo que tenga sentido, obtener un consenso de todas las partes y atenerse a él como si su vida dependiera de ello.

En cuanto a qué convención usar votaría por esta:

TextBox name

Es corto y tiene un valor semántico como identificador. En cuanto al tipo del identificador, confiaría en Visual Studio para decirles que, ya que tiende a ser bueno en ese tipo de cosas.

 3
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 19:29:04

Desearía que alguien se convirtiera en la autoridad en este tema y simplemente lo dijera como es, y comenzara a aplicarlo... Lo peor para mí es cuando la gente lo mezcla en la misma aplicación o peor aún en la misma clase.

He visto algunas cosas bastante horribles con txtName, NameTextBox, name y textBox1 todos usados en el mismo formulario... qué asco.

Donde trabajo tenemos un documento de estándares que nos dice cómo hacerlo, dónde hacerlo, y creo que solo el 20% de la gente se preocupa por intentarlo y conforme.

Normalmente cambiaré algo si Fxcop me grita.

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

Estilos de mayúsculas

Tenga en cuenta que: Microsoft. NET recomienda UpperCamelCase (también conocido como "Estilo Pascal") para la mayoría de los identificadores. (Se recomienda una cámara baja para los parámetros).

 3
Author: zimmer62,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-28 20:52:36

Utilizo la notación de Hungación con una pequeña diferencia.

Ahora trabajo en un proyecto que tiene una interfaz de usuario bastante rica. Así que encontrar, con Intellisense, un botón llamado, digamos, btnGetUsers es muy fácil.

Las cosas se complican cuando la aplicación es capaz de obtener usuarios de diferentes ubicaciones. Eso son diferentes controles. Así que empecé a nombrar mis controles después de donde se encuentran y todavía utilizar la notación húngara.

Como ejemplo: tabSchedAddSchedTxbAdress significa que txbAddress es un cuadro de texto donde se puede insertar una dirección y se encuentra en la pestaña Agregar programación desde el Control de la pestaña Programación. De esta manera puedo encontrar controles muy fáciles y, cuando escribo simplemente "btn" no recibo, a la vez, muchos botones de toda la interfaz de usuario.

Por supuesto, esto es solo para ayudarme a mí mismo. No soy consciente de una buena práctica. Sin embargo, ayuda mucho.

Mosu '

 3
Author: mosu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-10 17:26:10

Nombro todos mis elementos de interfaz de usuario TypeDescriptor. Siguiendo su ejemplo, TextBoxName.

 2
Author: Matt Grande,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 19:31:22

He estado trabajando con un equipo últimamente que se está moviendo desde MFC (6.0 ...). Allí tendrían algo como

CString Name;
CEdit ctlName;

La forma más fácil de migrar ha sido usar algo como

TextBox ctlName

Basta con recordar que la variable es el control y no el valor del control.

Creo que incluir el tipo como parte del nombre es simplemente ANTIGUO.

Edit editar -- Otro beneficio es que todos los controles se agrupan al navegar. Si el tipo real fueron utilizados, los controles ComboBox sería bastante lejos de los controles del cuadro de texto.

 2
Author: Brad Bruce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 19:39:41

Tiendo a usar c_typeName (tenga en cuenta que el tipo y el nombre son diferentes), por ejemplo, c_tbUserEmail para un cuadro de texto en el que el usuario debe escribir su correo electrónico. Lo encuentro útil porque cuando hay muchos controles a, puede ser difícil encontrarlos en la lista de millas de intellisense, por lo que al agregar el prefijo c_ puedo ver fácilmente todos los controles en esa forma.

 2
Author: ShdNx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 20:30:58

Esta locura de nombrar húngaro/VB6 tiene que parar.

Si Microsoft realmente quería que nombraras tus controles en función de su tipo, ¿por qué Visual Studio no selecciona automáticamente 'txt' o 'btn' cuando añades el control a tu formulario web/win?

 2
Author: Craig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-26 18:51:27

Uso la notación húngara, que hace fácil encontrar controles en páginas grandes.

 1
Author: Cleiton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 19:33:48

Para los elementos que no planeo usar en mi código, simplemente dejo que el diseñador lo maneje por mí; si se convierten en algo usado en mi código, se cambian a algo significativo y eso pasa a ser descriptionType (nameTextBox). Es cómo el diseñador los crea si se le da suficiente información (echa un vistazo a los elementos del menú Exit "Exit" se convierte en exitMenuItem).

 1
Author: Austin Salonen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 19:42:04

Mi propia práctica es: Type _contextDescriptionType. Por ejemplo:

TextBox _searchValueTextBox

De todos modos la convención de nomenclatura es demasiado personal o impuesta por reglas generales. En cualquier caso, debe documentarse en algún lugar para que todos los desarrolladores de proyectos puedan acceder fácilmente.

 1
Author: terR0Q,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 20:04:00

Tiene las Pautas para Nombres de Microsoft. No sigo todo, pero es un buen punto de partida

 1
Author: Gabriel Mongeon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-22 18:14:23

Creo que la convención de nombres existe para facilitar el esfuerzo de codificación del desarrollador y ayuda en la capacidad de administración. A mi entender cualquier nombre que es útil en fácil acceso debe ser seguido.

Vi el número de comentarios con un enfoque diferente, pero lo mejor que encontré en mis proyectos es prefijar el nombre de control 1st three. Hay muchas razones detrás de seguir este enfoque.

  1. Intellisense reuniría a todo el mismo tipo.
  2. Las ventanas de propiedades de formulario también mostrarían todas las mismas control ordenado
  3. En formularios complejos puede identificar fácilmente que está tratando con etiqueta o cuadro de texto (por ejemplo. lblAccounts y txtAccounts)
  4. Un nuevo usuario puede lidiar fácilmente con la codificación.
  5. Imagine que tengo controles accountLst, accountlbl, accounttxt, accountgrd, accountChk en el mismo formulario.

Mientras codifica, un desarrollador siempre sabe que está accediendo a un cuadro de texto o etiqueta. Donde como él no está claro con qué nombre el otro desarrollador ha utilizado. Así que con solo escribir" lbl " intellisens traería toda la lista de etiquetas para elegir, donde está si ha utilizado el enfoque utilizado en #5, entonces intellisense traería todos los controles utilizando acc. Rara vez vi hacer algún bucle con el nombre de control comenzar con "cuenta" o algo así. Esto significa que no ayudaría en ningún incidente raro.

Mi apuesta es hacer cosas que ayuden a entender el código fácilmente para otros desarrolladores. Porque a medida que creces en tu carrier, no siempre haces codificación, alguna otra persona vendría y tomaría tu asiento.

¡La elección es tuya, de la manera que quieras!

 1
Author: Rohit.Net,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-05 01:08:53

Si hay una buena separación de preocupaciones en el diseño de una aplicación, supongo que no habrá necesidad de nombrar botones como LoginButton, LoginBtn o btnLogin. Si el propietario del objeto es un elemento de interfaz de usuario, llamémoslo Login y si el propietario no es un elemento de interfaz de usuario, entonces el objeto está en un lugar equivocado.

 0
Author: Dr Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-23 16:54:48