命名约定:动词/名词和英语语法使用指南

18

有没有人能够指导我如何选择接口、类,以及与对象或方法相关的属性和方法的命名?可以提供一些网站或智慧吗?

这个问题特别针对Microsoft开发,因此像Java中的“doGet”等并不常用,但跨语言的一些通用规则(我认为)必须存在。

举个例子:我有4个选项来命名一个接口:

IGroupedItem
IGroupableItem
IDataEntity
IGroupedEntity

它们都包含一个形容词和名词,或者只是一个名词。从 .NET 框架来看,似乎必须有某种规则集以保持一致性?除了方法的明显动词之外。

编辑:虽然这个例子是一个接口,但我不仅限于接口。一般的准则是类是名词,方法是动词,属性是名词。我想说的是同义词的选择。到处抛出 "Entity" 是错误的吗?

8个回答

22

请查看MSDN文章中的命名准则。简而言之:

  • 类名和属性名使用名词(显而易见)
  • 接口名称以I开头,使用名词和/或形容词来描述行为
  • 方法名使用动词来描述动作

例如- IGroupableItem。


1
那为什么不使用IGroupedItem呢?它符合名词和形容词,或名词短语的标准。 - Chris S
8
可能是因为你可以说某个东西是“可分组的”是因为它实现了接口,但你不能保证它已经被“分组”。 - Ant
这个 + Spodi 的回答是我能找到的最接近答案而不会陷入巨大的语言争论,但我不能给出两个答案。 - Chris S
1
将接口与类区分开来,使用"I"(或在类侧使用"Impl")是一种不好的做法。 "Interface"是一个技术概念,不应该成为名称的一部分。这将不比ageInt好多少。 - deamon
@deamon Microsoft建议在接口名称前添加"I"。这是我所知的唯一推荐的匈牙利命名法形式,在这种情况下,它似乎是一种有用的约定,特别是当您正在使用智能感知等功能时。 - BrainSlugs83
Henry David Thoreau曾说过“简化,简化,再简化。”而我只说“简化”。有时候,我也会用IGroupable。 - Steve Lautenschlager

8

接口是一个类能够做的事情。它不是关于类本身是什么,而是关于它能够做什么

IGroupableItem

其他名称描述了事物的本质或者过于模糊而无法使用。

特别是,“IDataEntity”这个名称在很大程度上没有意义。毕竟,所有东西都是数据实体。


3
不总是那么清晰明确,对吧?比较一下ICollection、IAsyncResult、IHasXmlNode。 - annakata
3
基础设施的名称可以模糊一些,但应用程序的名称应该更加具体明确。 - S.Lott

4

MSDN有一篇文章专门介绍接口命名准则,这可能会对你有所帮助。如果你需要的是除接口以外的其他命名约定,以及许多其他命名和设计准则,同样可以在MSDN上找到。


1

1

你在说匈牙利算法吗?不确定它是否适用于这里。 - annakata
只需阅读这篇文章。"hungarian" 有几个意思。单词 "type" 的意思不是 "integer" 而是 "coordinate" 或 "weight"。因此,在那个匈牙利语中,coordX=weightY 是错误的。而且 weightConvert(coordX) 方法也是错误的。你从代码中看到这个错误就行了。 - Malx

1
除了 MSDN 指南外,Juval Lowy 的 IDesign 也有一份相当有用的 C# 编码标准文档(不知道与 MSDN 相比有多少不同)。

C# 编码标准


0

在函数(等)名称中使用动词时,通常使用原始形式的动词,例如HandleExecuteQueryIsAny,...

一些不太常见的用法使它与s/es变为单数,例如ProducesResponseType(MS Docs)。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接