Рекомендации для соглашений об именовании графического интерфейса C#? [закрытый]
графические интерфейсы, написанные в WinForms или XAML, по-видимому, имеют наиболее широко различающиеся соглашения об именах между проектами, которые я вижу. Для простого TextBox
для имени человека я видел различные соглашения об именах:
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
Я соблюдаю правила StyleCop для всех моих .cs-файлы обычно и видят, что другие тоже это делают, но GUI имеет тенденцию нарушать эти правила или сильно варьироваться. Я не видел никаких рекомендаций Microsoft, которые конкретно относятся к элементам GUI вместо обычных переменные или даже примеры, которые будут применяться вне консольного приложения.
каковы наилучшие методы для именования элементов в графическом интерфейсе?
17 ответов:
Я использую венгерский старой школы... txt для текстового поля, btn для кнопки, а затем обобщенное слово, а затем более конкретное слово. т. е.:
btnUserEmail
было много людей, говорят что-то вроде "omg это так старый, VB6 вызов!" но в приложении UI Rich winforms я могу найти и изменить вещи быстрее, потому что обычно первое, что вы знаете о элементе управления, - это тип, затем категория, а затем получить конкретную информацию. В то время как более новый стиль именования ребята из Конвенции застряли, пытаясь вспомнить, как они назвали это текстовое поле.
Я использую:
TextBox nameTextBox;
как использовать:
MailAddress homeAddress;
причина этого заключается в том, что в этих случаях "текстовое поле" и "адрес" описывают то, что представляет объект, а не то, как он хранится или используется. Но в другом случае, как хранение полного имени человека, я бы использовал:
string fullName;
нет:
string fullNameString;
потому что "строка" не описывает то, что представляет объект, а только то, как он хранится.
то же соглашение, что и все остальное в .NET: только описательное имя Camel case, необязательно с суффиксом, если вам нужно различать разные классы для одной и той же логической "вещи". Например:
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
и так до бесконечности. На самом деле не имеет значения, что такое суффиксы, если они последовательны и описательны.
Это не мое изобретение, но мне нравится это:
TextBox uxName = new TextBox(); Label uxNameLabel = new Label(); Button uxAccept = new Button();
Я предпочитаю это венгерской нотации, так как все мои элементы управления пользовательского интерфейса отображаются в одном блоке в intelisense. UX для "пользовательского опыта". Также хорошо, если вы измените элемент управления с текстового поля на combobox или что-то еще, так как имя не изменится.
самое главное в соглашениях об именах-это выбрать что-то, что имеет смысл, получить консенсус от всех сторон и придерживаться его, как будто от этого зависела ваша жизнь.
Что касается того, какую конвенцию использовать, я бы проголосовал за эту:
TextBox name
он короткий и имеет семантическое значение в качестве идентификатора. Что касается тип идентификатора я бы полагался на Visual Studio, чтобы сказать вам, что, как правило, хорошо в таких вещах.
Я хочу, чтобы кто-то стал авторитетом по этому вопросу и просто сказал это, как есть, и начал его применять... Хуже всего для меня, когда люди смешивают его в том же приложении или еще хуже в том же классе.
Я вижу некоторые довольно ужасные вещи с txtName, NameTextBox, name и textBox1, все используемые в одной и той же форме... фу.
где я работаю у нас есть нормативный документ, который говорит нам, как это сделать, где это сделать, и я думаю, что только 20% людей даже заботьтесь, чтобы попытаться соответствовать.
Я обычно буду что-то менять, если Fxcop кричит на меня.
http://en.wikipedia.org/wiki/Naming_conventions_%28programming%29
обратите внимание, что: Microsoft .NET рекомендует UpperCamelCase (он же "стиль Паскаля") для большинства идентификаторов. (lowerCamelCase рекомендуется для параметров).
Я использую обозначение Hungation с одной небольшой разницей.
теперь я работаю над проектом, который имеет довольно богатый пользовательский интерфейс. Поэтому найти, с помощью Intellisense, кнопку под названием, скажем, btnGetUsers очень легко.
все усложняется, когда приложение может получить пользователей из разных мест. Это разные элементы управления. Поэтому я начал называть свои элементы управления после того, где они расположены, и по-прежнему использовать венгерскую нотацию.
в качестве примера: tabSchedAddSchedTxbAdress означает, что txbAddress-это текстовое поле, в которое можно вставить адрес и которое находится на вкладке добавить планирование из элемента управления вкладка планирование. Таким образом, я могу найти элементы управления очень легко, и когда я набираю просто "btn", я не получаю сразу много кнопок со всего пользовательского интерфейса.
конечно, это просто, чтобы помочь себе. Я не знаю такой практики. Однако это очень помогает.
Mosu'
Я называю все мои элементы пользовательского интерфейса TypeDescriptor. Следуя вашему примеру,
TextBoxName
.
в последнее время я работаю с командой, которая переходит из MFC (6.0 ...). Там у них будет что-то вроде
CString Name; CEdit ctlName;
самый простой способ миграции - использовать что-то вроде
TextBox ctlName
это просто напоминание о том, что переменная является элементом управления, а не значением элемента управления.
Я думаю, что в том числе тип как часть имени просто старый.
-- edit -- Еще одно преимущество заключается в том, что все элементы управления сгруппированы вместе при плавании. Если бы использовался фактический тип, элементы управления ComboBox были бы довольно далеки от элементов управления TextBox.
Я обычно использую c_typeName (обратите внимание, что тип и имя разные), например c_tbUserEmail для текстового поля, в которое пользователь должен ввести свою электронную почту. Я считаю это полезным, потому что, когда есть много элементов управления a, их трудно найти в списке intellisense длиной в мили, поэтому, добавив префикс c_, я могу легко увидеть все элементы управления в этой форме.
это венгерское/VB6-именование безумия должно прекратиться.
Если Microsoft действительно хотела, чтобы вы называли свои элементы управления на основе их типа, то почему Visual Studio автоматически не привязывает " txt " или " btn " при добавлении элемента управления в форму web/win?
для элементов, которые я не планирую использовать в своем коде, я просто позволяю дизайнеру обрабатывать его для меня; если они становятся чем-то используемым в моем коде, они изменяются на что-то значимое, и это происходит descriptionType (nameTextBox). Это то, как дизайнер создает их, если дается достаточно информации (проверьте пункты меню -- "Выход" становится exitMenuItem).
моя собственная практика: тип _contextDescriptionType. Например:
TextBox _searchValueTextBox
в любом случае соглашение об именовании либо слишком личное, либо навязывается общими правилами. В любом случае он должен быть задокументирован где-то, чтобы все разработчики проекта могли легко получить доступ.
У вас рекомендации для Имен из Microsoft. Я не все понимаю, но это хорошая отправная точка
Я считаю, что соглашение об именах существует для облегчения усилий разработчика по кодированию и помогает в управляемости. Чтобы я понял, любое имя, которое полезно в легком доступе, должно следовать.
Я видел количество комментариев с разным подходом, но лучшее, что я нашел в своих проектах, - это префикс первого имени трех элементов управления. Есть много причин следовать этому подходу.
- Intellisense собрал бы все тот же тип вместе.
- окна свойств формы также будет отображаться все тот же элемент управления сортируется
- на сложных формах вы можете легко определить, что вы имеете дело с меткой или текстовым полем (например. lblAccounts и txtAccounts)
- новый пользователь может легко справиться с кодированием.
- представьте, что у меня есть accountLst, accountlbl, accounttxt, accountgrd, accountChk элементы управления на той же форме.
при кодировании разработчик всегда знает, что он обращается к текстовому полю или метке. Где как он не понятно с каким именем другой разработчик использовал. Таким образом, просто написав "lbl" intellisens принесет весь список меток на выбор, где если вы использовали подход, используемый в #5, то intellisense принесет все элементы управления с помощью acc. Я редко видел, чтобы какой-то цикл с именем элемента управления начинался с "учетной записи" или так. Это означает, что он не поможет ни в одном редком случае.
моя ставка заключается в том, чтобы делать вещи, которые помогают в понимании кода легко для других разработчиков. Потому что, когда вы растете в своем носителе, вы не всегда будете делать кодирование, некоторые другой человек придет и займет ваше место.
выбор за вами, какой путь вы хотите!
Если есть хорошее разделение проблем в дизайне приложения, я думаю, не будет необходимости в именовании кнопок как LoginButton, LoginBtn или btnLogin. Если владелец объекта является элементом пользовательского интерфейса, поэтому давайте назовем его Login, а если владелец не является элементом пользовательского интерфейса, то объект находится в неправильном месте.