命名用于在代码隐藏中引用的UI控件的约定的最佳实践?

时间:2008-09-21 19:26:02

标签: naming-conventions report

在表单和报表上命名UI控件(文本框,下拉列表等)以便在代码隐藏页面中引用时,最佳做法是什么?

我在办公室里开发了很多报告和表格。我有几个Web应用程序,提供从各种和多个数据源(Access,SQL,Oracle)生成的大约80多个“实时”报告。这些报告被视为“实时”,因为它们接受表单中的用户集参数,然后查询数据库以根据当前可用信息生成报告。

因此,该过程首先获取用户设置的值,将这些值传递给数据库查询,接收数据集,最后将数据集分配给报表。在某些情况下,需要在生成报告之前从数据集计算报告上显示的其他字段。这需要引用报表上的输出控件来分配计算值。

虽然我并不真的关心在我的代码中使用变量或成员字段的前缀,但我确实使用它们来识别UI控件。例如,txtFirstName引用报表控件以将数据集中FirstName字段的数据分配给报表上的显示控件。在表单和报表上命名/引用UI控件是否有更好的做法?

7 个答案:

答案 0 :(得分:7)

我在工作的主要产品使用txt_pnl_ etc前缀。这确实有效,但是当你将隐藏/显示控件的东西从一个tr转换为一个面板时,有时会因为你必须重命名它而有点痛苦。

我在新项目中开始做的是使用ui前缀命名我的UI控件;例如,uiName。由于我强烈反对anti-hungarian notation,并努力争取self-documenting code,因此这个惯例运作良好。事实上,如果有的话,它是真正的匈牙利表示法(ui是前缀,意思是用户界面控制)。

答案 1 :(得分:7)

我仍然使用匈牙利表示法来控制但不再使用变量。

btn Button
cbo ComboBox
chk CheckBox
clb CheckedListBox
grp GroupBox
iml ImageList
lbl Label
lnk Hyperlink
mnu Menu
pbr ProgressBar
pic Picture
pnl Panel
rtb RichTextBox
tmr Timer
tvw TreeView
txt TextBox

答案 2 :(得分:7)

对于GUI控件,我使用控件名称后缀变量名称:

  • firstNameTextBox
  • lastNameTextBox
  • 提交按钮

这使得例如_firstName和firstNameTextBox.Text之间的关系显而易见,并且没有人必须记住匈牙利语符号的等价物。在命名变量时,我总是选择清晰度而不是简洁。

答案 3 :(得分:3)

你在这里的答案将是非常主观的。不同的品味和编程背景会给你不同的偏好。

从长远来看,对你来说最重要的是所有项目之间的一致性,这样无论是谁开发了代码,你都可以在阅读时理解它。

我们外包很多,因此请务必将我们的命名惯例传达给所有项目经理。

以下是命名约定的一些链接:

http://www.irritatedvowel.net/Programming/Standards.aspx

http://msdn.microsoft.com/en-us/library/xzf533w0(VS.71).aspx

http://www.visualize.uk.com/resources/asp-net-standards.asp

答案 4 :(得分:1)

我对你做的很相似。当你有大量的控件时它会变得混乱,所以我在每个名字前面加上控件类的大写字母。

例如:

TextBox - > tbName

DataGrid - > dgName

面板 - > PNAME

这清楚地说明了如何处理新控件(即如何派生前缀)

答案 5 :(得分:0)

我一直认为前缀的唯一真正原因是你可以在同一表格/页面上使用txtFirstName和lblFirstName之类的东西。因为,绝大多数时候,我真的只使用实际的字段控件本身,我跳过了前缀,只使用相关控件的前缀。例如,lblMonth&月,跳过cbo前缀。

它可以节省打字,通常很明显你在这种形式下使用什么样的控件。更复杂的控件将获得完整的前缀处理。

答案 6 :(得分:0)

我更喜欢iOS UI组件的2个字符前缀:

bt_UIButton
lb_UILabel
tx_UITextField
tv_UITextView
vw_UIView
im_UIImageView
sc_UIScrollView
tb_UITableView
cl_UICollectionView
st_UIStackView
pk_UIPickerView
pr_UIProgressView
ai_UIActivityIndicatorView
wb_UIWebView / WKWebView
mp_MKMapView
gr_UIGestureRecognizer
sw_UISwitch
sl_UISlider
sp_UIStepper
sg_UISegmentedControl
pg_UIPageControl
dp_UIDatePicker