20

我们正在制定我们希望在我们的开发团队中使用的设计指南,并在今天就如何命名 ASP.NET 控件展开讨论。我说的是我们的好朋友 Label、TextBox、Button 等。

我们提出了以下三种我们投票的可能性:(示例是输入/显示名字的文本框)

  1. 将控件类型作为后缀添加到控件 ID:[FirstName _TextBox] 或 [FirstName _tbx]
  2. 将控件类型作为前缀添加到控件 ID [tbxFirstName]
  3. 将控件的 ID 设置为 FirstName 并命名相关字段(如文本框的标签或验证器),如选项 2 [lblTextBox] 中所示。

我们最终决定使用选项 2。它不像选项 1 那样冗长,我喜欢它在控件名称之前指定它是什么控件。

我的问题是,Microsoft 是否针对这些前缀发布了任何指南,或者您是否对我们的决定有任何意见。

4

18 回答 18

31

Visual Studio 在您将“TextBox1”添加到页面时添加它的原因是因为 Microsoft 无法知道您打算如何使用它。将其命名为“Control1”会太令人困惑,因为它可以是任意数量的控件。

Microsoft 提供了针对 OO 命名约定的一般指南,但没有专门针对 UI 控件的命名。由于 UI 控件最终是代码中使用的变量,因此它们应该遵循与任何其他变量相同的约定——没有匈牙利符号前缀。

主要原因是...

  • 控件的类型可能会从文本框更改为列表框,然后必须修复所有相关代码(前面提到过)
  • 你的代码应该更关心控件的内容,而不是它是什么类型的控件。当您关心控件的类型时,您开始依赖某些功能并破坏封装 - 您应该能够轻松地交换控件而无需更改太多或任何代码。(基本OOP原理)
  • 为标准控件提供前缀相当容易,但每天都在开发新控件。您可以制作自己的 WebUserControl,也可以购买一套第三方控件。您将如何决定自定义控件使用哪个前缀?您的代码应该关注其中包含哪些信息,而不是关注控件的类型。

例子

  • txtFirstName => 名字或名字
  • txtState => 州或州
  • cboState => state 或 State(更改控件类型的主要示例 lstState 或 rdoState - 它们都应该具有相同的名称,因为您的代码不关心控件的类型,而是用户选择的状态)
  • ctlBilling => billingAddress 或 BillingAddress (自定义控件 - 使用匈牙利表示法,它甚至不是很明显控件是什么,但是有了一个有意义的名称,我开始理解其中包含的信息。即 billingAddress.Street、billingAddress.FullAddress 等)
于 2009-05-26T15:08:52.243 回答
22

不确定微软官方标准,但这是我在整个开发生涯中所做的。

我一般在控件名称前面缩写控件类型。我保留缩写小写和控件的名称 CamelCase。

例如,用户名的 texbox 变为 tbUserName

以下是我使用的标准缩写列表:

Abbr     -  Control

btn  -  Button
cb   -  CheckBox
cbl  -  CheckBoxList
dd   -  DropDownList
gv   -  GridView
hl   -  Hyperlink
img  -  Image
ib   -  ImageButton
lbl  -  Label
lbtn -  LinkButton
lb   -  ListBox
lit  -  Literal
pnl  -  Panel
ph   -  PlaceHolder
rb   -  RadioButton
rbl  -  RadioButtonList
txt  -  Textbox
于 2008-10-08T08:27:54.167 回答
5

我发现大多数时候我关心的是控件用于什么类型的信息,而不是当前用于捕获该数据的控件类型,所以我更喜欢控件类型之前的信息类型,所以我可以在IDE 中的排序列表:

  • 年龄范围下拉列表
  • 同意条款复选框
  • 名字文本框
  • 姓氏文本框

对比:

  • chkAgreedToTerms
  • ddlAgeRange
  • txt名字
  • txt姓氏
于 2008-10-08T13:14:22.747 回答
2

我不确定有关 ASP.NET 的指南,但在 Microsoft 的框架设计指南一书中,有几个关于类成员命名的最佳实践指南。由于 ASP.NET 控件在大多数情况下会生成适当类型的受保护字段,因此我认为这些命名准则也适用于 ASP.NET 控件。事实上,代码分析不会区分控制引用字段和其他字段。

这些指南建议使用暗示逻辑用途的命名方案,而不是类型描述的变体。有几个原因。前缀对开发人员意味着一种类型,由于以后的更改可能不正确。它在代码维护中增加了一个额外的步骤。如果您将 Button 控件更改为 LinkBut​​ton 控件,则还需要更改名称以更正前缀。

出于这个原因,我会调用控件 FirstNameEdit 等...

于 2008-10-08T08:32:08.150 回答
2

Microsoft 确实在此处提供了一些指导。

当您将控件拖到 Web 表单上时,您会自动获得类似“TextBox1”的内容。那就是 IDE 告诉您应该根据您的特定需求更改“1”部分。

在这种情况下,“TextBoxFirstName”似乎是要走的路。

于 2008-10-08T17:47:58.060 回答
1

我更喜欢选项 1 的两个原因:

  1. FirstNameTextBox 与我的业务对象更匹配。
  2. 更适用于 IntelliSense。

话虽如此,我正在考虑更改为 FirstNameCtrl,原因是 csgero 指出了更改控件类型的原因。那么为什么要使用任何后缀或前缀来减少/消除与 asp/win 表单属性冲突的可能性。

于 2008-10-08T08:20:44.743 回答
1

我认为最好使用选项 1,因为通过它的含义和用法很容易找到该字段,以了解以后的编程编码。此外,使用 IntelliSense 来查找我们在编程代码中使用此字段的位置更有用。因此,我可以通过有意义的字段名称找到正确的控件。我不记得我对这个字段使用了什么样的控件,但是我可以通过使用有意义的字段名称而不是控件的类型来找到这个字段我想找到“城市”控件,我只输入“城市”,Intellisence将向我显示此控件的所有信息,但如果我不记得我使用哪种控件,我不知道从什么开始......

于 2011-05-11T20:12:36.267 回答
1
Abbreviation    ||   ASP.NET Control

标准控制:

按钮

CB复选框

cbl CheckBoxList

ddl下拉列表

fu 文件上传

hdn 隐藏字段

lnk 超链接

图像图像

ibtn(btn) 图像按钮

lbl 标签

lbtn(btn) 链接按钮

磅列表框

点亮字面量

mv 多视图

pnl面板

ph 占位符

rb 单选按钮

rbl RadioButtonList

txt 文本框

v 查看

数据控制

dtl 数据列表

dp 数据页面

dtv 详情查看

ets EntityDataSource

fv 窗体视图

gv 网格视图

lds LinqDataSource

lv - 列表视图

ods 对象数据源

qe QueryExtender

rpt中继器

smd SiteMapDataSource

sds SqlDataSource

xds XmlDataSource

验证控制

cpv 比较验证器

ctv CustomValidator

rv RangeValidator

rev 正则表达式验证器

rfv 必填字段验证器

vs Validation总结

验证控制:

cpv // 比较验证器

ctv CustomValidator

rv RangeValidator

rev 正则表达式验证器

rfv 必填字段验证器

于 2014-08-01T18:26:18.037 回答
0

我们也使用数字 2,但我并不完全相信这是一个好方法。这是来自“坏”种类的匈牙利符号,这意味着前缀表示类型(语法)而不是目的(语义)。这样做的问题是,从 TextBox 开始的内容可能稍后会变成 DropDown,然后是 RadioButtonGroup,并且您每次都必须重命名控件。

于 2008-10-08T07:10:40.763 回答
0

几乎每个人都使用匈牙利风格的前缀(选项 2)。语义命名不太有用,因为“名字”实际上是 texbox.Text 值,而不是文本框本身。

于 2008-10-08T07:34:16.007 回答
0

我倾向于使用控件类型作为前缀,然后使用控件名称,但我总是使用 CamelCase,因此在您的示例中,您可能拥有不同类型的控件。

  • Txb名字
  • DdFirstName
  • ChbFirstName

出于智能感知的原因,我也总是完全限定控件的名称,所以我不会做以下任何事情......

  • TxbFName
  • TxbClientNo
  • TxbNoOfCpn

但最终还是看个人喜好

于 2008-10-08T08:35:22.607 回答
0

我也一直在努力解决这个问题。我曾经使用“匈牙利风格前缀”。

现在我采取了不同的方法,我尝试将控件视为我班级的私有字段。我不会在我的私有字段后面加上它们的类型,那么我为什么要对 TextBox 这样做呢?

那么以前是这样的:

var newCustomer = new Customer();
newCustomer.Name = txtName.Value;
newCustomer.Address = txtAddress.Value;
newCustomer.City = txtCity.Value;
newCustomer.HasEnoughMoney = cbHasMoney.Selected;

变成:

var newCustomer = new Customer();
newCustomer.Name = name.Value;
newCustomer.Address = address.Value;
newCustomer.City = city.Value;
newCustomer.HasEnoughMoney = hasMoney.Selected;

老实说,我不在乎“名称”控件是文本框还是其他什么,我只想要它的价值。

如果您谈论您的控件或另一个字段/变量还不够清楚,我认为您应该重新考虑该字段/变量的名称或您的类的功能(意味着它可能有点大?) .

于 2008-10-08T12:55:53.890 回答
0

如果您从代码维护的角度来看它,那么在您 2 年前编写代码之后,最好的符号是什么。尽管我们尝试确保表单上没有太多字段,但我们都知道有时会发生这种情况。如果我们通过添加控件类型来使用匈牙利类型表示法,我认为更容易看到该值的来源,而不必在变量名称不明显的情况下弄清楚它。如果您使用任何类型的重构工具,那么更改控件的名称将自动更改代码,从而减少更改控件的争论。

于 2008-10-08T13:09:35.877 回答
0

我认为这里没有正确或错误的答案,无论您决定什么,我认为最重要的方面就是在实际编码时保持一致。

于 2008-10-08T13:16:43.163 回答
0

我使用 uxCity 是为了让您知道它绝对是用户界面控件,而不是其他对象,但如果您从 TextBox 转到 DropDownList,则无需更改它。

但是,如果我有一个 DropdownList一个文本框,我需要使用 dlCity 和 txtCity 或者我会使用组合 cboCity。

当您仅限于 8 个字符的名称并且没有智能感知或调试突出显示时,匈牙利表示法是必要的。这是一门学科,您可以看到,如果编码风格正确,则代码很可能是正确的。它也用于变量,因此您可以阅读代码并理解它,因为它是一种 DIY 类型的强制执行。

但是,我确实使用 CityTextbox、CityTextboxLabel CityUx、CityUxLbl

这完全取决于谁在为项目制定标准。

于 2013-03-18T12:30:16.973 回答
0

我发现使用匈牙利符号的唯一原因是 IDE 没有智能感知,而且很难弄清楚是什么,所以 iCounter 是一个整数

然而,使用brief 进行开发的时代已经一去不复返了,IDE 会在一秒钟内向您显示信息

然后你继承了 VB.NET 代码,它不区分大小写,你怎么办?

lblFirstName, txtFirstName 一个是标签,另一个是文本框

那么,如何在不区分大小写的情况下命名它们并真正知道它们是什么?

uxFirstName 和 uxFirstName 不起作用

我找到的唯一答案是使用匈牙利符号,是的,我吐在嘴里。然后是它的 vb.net,它应该区分大小写,因为 .net 是并且所有编译到 IL。

于 2015-11-13T23:19:26.077 回答
-1

不太确定是否有任何指导方针,我怀疑有,但我也总是使用 2 号!

于 2008-10-08T07:01:26.743 回答
-1

这些实际上只是基于您的偏好,但是是的,所描述的选项 2 不那么冗长,甚至在显示其名称之前就向您指示控件的类型。

于 2008-10-08T07:08:34.870 回答