com.myproject.sql.Connection
com.myproject.user.User
com.myproject.user.UserFactory
但是,如果我有一个包实际上包含单个类型的实现的集合,例如作为任务,规则,处理程序,模型等,哪个更好?
com.myproject.tasks.TakeOutGarbageTask
com.myproject.tasks.DoTheDishesTask
com.myproject.tasks.PaintTheHouseTask
或
com.myproject.task.TakeOutGarbageTask
com.myproject.task.DoTheDishesTask
com.myproject.task.PaintTheHouseTask
#1 楼
对于具有相同内容的程序包使用复数,对于具有不同内容的程序包使用单数。类类似于数据库关系。数据库关系应以单数形式命名,因为其记录被视为该关系的实例。关系的功能是从简单数据组成复杂的记录。另一方面,包不是数据抽象。它有助于组织代码和解决命名冲突。如果程序包以单数命名,则并不意味着该程序包的每个成员都是该程序包的一个实例;它包含相关但异类的概念。如果以复数形式命名(通常如此),则我希望程序包包含同类概念。例如,类型应命名为
TaskCollection
而不是TasksCollection
,因为它是一个集合包含Task
的实例。名为com.myproject.task
的软件包并不意味着每个包含的类都是任务的实例。可能会有TaskHandler
,TaskFactory
等。但是名为com.myproject.tasks
的软件包将包含不同类型的所有任务:TakeOutGarbageTask
,DoTheDishesTask
等。评论
有关类似问题,请参见english.stackexchange.com/q/25713。类别类似于单数,类型类似于复数。
–马修·罗达图斯(Matthew Rodatus)
2011年5月17日15:11
您提供的链接恰好显示了此规则的例外。 bean是复数,但是java.beans包含所有与JavaBeans相关的类。
– hellodanylo
2012年9月18日于12:11
好的答案,但我不同意数据库关系逻辑。 ERD中的关系是单数的,因为它们显示了实体之间的关系。表是关系的物理实现,并且表包含多行,因此应为多个IMO。答案为“此表中有什么?”是“用户”而不是“用户”。当然,在企业界(C#,Java)中,单数命名似乎比Ruby,Python,Javascript和PHP等社区更常见。
–黑麦
13年5月21日在20:49
@SkyDan的评论指出了一些非常重要的事情,在这里被完全忽略了。在我看来,“ java.beans”的复数命名实际上是一个错误,应该将其命名为“ java.bean”(单数形式)。
– Vicky Chijwani
2015年11月21日在22:14
@VickyChijwani @SkyDan,因为JavaBeans™是商标,他们可能希望按原样保留名称以指代该技术本身,因此他们使用了java.beans。
– Hejazi
16年7月28日在7:52
#2 楼
这可能取决于特定的语言。在.NET(C#)中,如果可能发生名称空间类型的名称冲突,则绝对应为复数形式(type name expected but namespace found
错误)。我已经解决了这一点,这很不愉快,并且导致整个代码中的类型名称都超出了标准。例子。
评论
与数据库表名称一样,单数应始终为单数,但出于不同的原因。例如,看看任何流行的标准库,例如Java或Python。@Jarrod Roberson:请发布您的答案作为答案,以便我们正确投票。
@Jarrod将需要一些示例,因为在标准库中,大多数类都属于我列出的第一类。
@Renesis看看我最新的答案。
@Matthew-我喜欢。您已经表达了我的怀疑,但不确定如何编纂。