ASP.NET控件的命名准则是什么?

时间:2008-10-08 06:55:58

标签: asp.net naming-conventions coding-style

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

我们提出了以下三种投票方式:(示例是输入/显示FirstName的TextBox)

  1. 将控件类型作为后缀添加到控件ID中:[FirstName _ TextBox]或[FirstName _ tbx]
  2. 将控件类型添加为控件ID [tbxFirstName]
  3. 的前缀
  4. 将控件的ID设置为FirstName和名称相关字段(如文本框或验证程序的标签),如选项2 [lblTextBox]中所示。
  5. 我们最终决定使用选项2.它不像选项1那么冗长,我喜欢它指定它在控件名称之前的控件。

    我的问题是微软是否已经发布了这些前缀的指南,或者如果您对我们的决定有任何意见。

18 个答案:

答案 0 :(得分:29)

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

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

主要原因是......

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

实施例

  • txtFirstName => firstName或FirstName
  • txtState =>州或州
  • cboState =>状态或状态(更改控件类型的主要示例如何关于lstState或rdoState - 它们应该都具有相同的名称,因为您的代码不关心控件的类型,而是用户选择的状态)
  • ctlBilling => billingAddress或BillingAddress(自定义控件 - 使用匈牙利语表示,控件即使是什么也不是很明显,但是我有一个有意义的名称,我开始理解它包含的信息。即billingAddress.Street,billingAddress.FullAddress等。)

答案 1 :(得分:22)

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

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

E.g。用户名的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

答案 2 :(得分:5)

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

  • AgeRangeDropDownList
  • AgreedToTermsCheckBox
  • FirstNameTextBox
  • LastNameTextBox

VS

  • chkAgreedToTerms
  • ddlAgeRange
  • txtFirstName
  • txtLastName

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

Abbreviation    ||   ASP.NET Control

标准控制:

btn按钮

cb CheckBox

cbl CheckBoxList

ddl DropDownList

fu FileUpload

hdn HiddenField

lnk Hyperlink

img Image

ibtn(btn)ImageButton

lbl Label

lbtn(btn)LinkBut​​ton

lb ListBox

lit litral

mv MultiView

pnl Panel

ph PlaceHolder

rb RadioButton

rbl RadioButtonList

tbl表

txt TextBox

v查看

数据控制

dtl DataList

dp DataPager

dtv DetailsView

ets EntityDataSource

fv FormView

gv GridView

lds LinqDataSource

lv - ListView

ods ObjectDataSource

qe QueryExtender

rpt Repeater

smd SiteMapDataSource

sds SqlDataSource

xds XmlDataSource

验证控制

cpv CompareValidator

ctv CustomValidator

rv RangeValidator

rev RegularExpressionValidator

rfv RequiredFieldValidator

vs ValidationSummary

验证控制:

cpv // CompareValidator

ctv CustomValidator

rv RangeValidator

rev RegularExpressionValidator

rfv RequiredFieldValidator

答案 5 :(得分:1)

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

  1. FirstNameTextBox与我的业务对象更紧密地匹配。
  2. 更适用于IntelliSense。
  3. 说过我正在考虑更改为FirstNameCtrl,因为csgero指出了更改控件类型的原因。那么为什么要使用任何后缀或前缀来减少/删除与asp / win表单属性冲突的可能性。

答案 6 :(得分:1)

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

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

因此我会调用控件FirstNameEdit等...

答案 7 :(得分:1)

我认为最好使用选项1,因为很容易通过其含义和用途来查找字段,以便了解编程编码。此外,它更适用于IntelliSense,以便在我们的编程代码中找到我们使用此字段的位置。因此,我可以通过有意义字段的名称找到正确的控件。我不会记得我对这个字段使用什么样的控件但是我可以通过使用有意义的字段名称而不是控件示例的类型来找到这个字段我想找到“城市”控件,我只是典型的“城市”,Intellisence会告诉我这个控件的所有信息,但是如果我不记得我用的是什么样的控件,我不知道该怎么办......

答案 8 :(得分:0)

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

答案 9 :(得分:0)

我发现使用匈牙利表示法的唯一原因是IDE没有智能感知并且要弄清楚什么是iCounter是一个整数是不容易的

然而,使用Brief进行开发的时间早已不复存在,IDE将在第二个

中显示信息

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

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

那么如何在没有区分大小写的情况下命名这些内容并实际知道它们是什么?

uxFirstName& uxFirstName不起作用

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

答案 10 :(得分:0)

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

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

匈牙利语符号是de rigeur,当你被限制为8个字符的名称,没有智能感知或调试突出显示。这是一门学科,你可以看到,如果编码风格是正确的,代码可能是正确的。它也被用于变量,所以你可以阅读代码并理解它,因为它是一种DIY类型的执行。

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

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

答案 11 :(得分:0)

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

答案 12 :(得分: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;

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

如果你谈论你的控制或另一个领域/变量还不够清楚,我认为你应该重新考虑那个领域/变量的名称或你的类的功能(这意味着它可能有点大吗?)。

答案 13 :(得分:0)

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

  • TxbFirstName
  • DdFirstName
  • ChbFirstName

出于intellisense的原因,我也总是完全限定控件的名称,所以我不会做以下任何一个......

  • TxbFName
  • TxbClientNo
  • TxbNoOfCpn

但最终归结为个人偏好

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

答案 16 :(得分:-1)

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

答案 17 :(得分:-1)

这些实际上只是基于您的偏好,但是,所描述的选项2不那么详细,并且即使在显示其名称之前也向您指示控件的类型。