类的命名:单数还是复数?[关闭]


58

对于类名,我总是很难在单数形式和复数形式之间进行选择:

CustomerRepository vs. CustomersRepository
CustomerService vs. CustomersService
CustomerController vs. CustomersController

对于复合名称,则更加困难:

OrderCustomerRepository vs.OrderCustomersRepository vs.OrdersCustomersRepository

您喜欢哪种方式,为什么?


该类是否包含多个客户的存储库?如果这是一个供一个客户使用的存储库...
JeffO 2011年

2
@Jeff O,存储库可以同时包含GetCustomerById和GetCustomers方法
SiberianGuy

2
在数据建模中,表名应为单数。如果您的应用程序使用的域类对应于您的数据模型1-1,那么最好保持命名单一。当然,以1-1方式将类映射到表可能不是为OO应用程序构建对象模型的最佳方法,但这是个问题。
NoChance 2011年

Answers:


73

我唯一的多元化就是收藏。

foreach (var customer in customers)
{
    // do something with customer
}

您所有的示例都是单个对象,因此它们不是多元的。是的,名称是指可能具有多个实例的对象,但是名称中您需要知道的就是对象实体(即客户)。

因此,在所有示例中,单数形式都是正确的形式。 使生活更加轻松。


2
我会使用customerCollection集合,但对于其余部分,我同意。这是数据库设计中的最佳实践,并且在代码中也相当不错。
2011年

12
我不喜欢“收藏”之类的字眼。英语是使用复数来指代事物集合的一种非常好的方法。
Gort机器人2012年

而不是Collection怎么样Iterator
朱利安

@Julian An Iterator将是某种协同例程,而不是用于容纳多个对象的数据结构,对吗?
威尔逊

64

使用单数。用来拧螺丝的工具称为“螺丝起子”,而不是“螺丝起子”。

但是,请相应地对方法和属性名称进行复数,以表示将返回一个值还是它们的集合。


7

绝对单数。您没有创建的对象,而是创建了对象的People集合Person。我会用复数唯一的一次将是静态类,即SupportServicesStringUtils等等。但是在这种情况下,该类行为更象是一个命名空间比什么都重要。


1
想想,我一直在使用Peoples系列!
约旦

2
List <person> people ...对我来说似乎还可以,@ Jordan。
StevenV 2011年

1

请记住,类是对象的模板。因此,请考虑您要引用的对象。

通常,它是单个实体,尤其是当它是ORM实体时。有时可能是一个集合。

我相信答案是针对具体情况的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.