通常,尤其是在库中,程序包包含围绕单个概念组织的类。示例:xml,sql,user,config,db。我认为我们所有人都很自然地认为这些软件包以单数形式是正确的。


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


评论

与数据库表名称一样,单数应始终为单数,但出于不同的原因。例如,看看任何流行的标准库,例如Java或Python。

@Jarrod Roberson:请发布您的答案作为答案,以便我们正确投票。

@Jarrod将需要一些示例,因为在标准库中,大多数类都属于我列出的第一类。

@Renesis看看我最新的答案。

@Matthew-我喜欢。您已经表达了我的怀疑,但不确定如何编纂。

#1 楼

对于具有相同内容的程序包使用复数,对于具有不同内容的程序包使用单数。

类类似于数据库关系。数据库关系应以单数形式命名,因为其记录被视为该关系的实例。关系的功能是从简单数据组成复杂的记录。另一方面,包不是数据抽象。它有助于组织代码和解决命名冲突。如果程序包以单数命名,则并不意味着该程序包的每个成员都是该程序包的一个实例;它包含相关但异类的概念。如果以复数形式命名(通常如此),则我希望程序包包含同类概念。例如,类型应命名为TaskCollection而不是TasksCollection,因为它是一个集合包含Task的实例。名为com.myproject.task的软件包并不意味着每个包含的类都是任务的实例。可能会有TaskHandlerTaskFactory等。但是名为com.myproject.tasks的软件包将包含不同类型的所有任务:TakeOutGarbageTaskDoTheDishesTask等。

评论


有关类似问题,请参见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错误)。我已经解决了这一点,这很不愉快,并且导致整个代码中的类型名称都超出了标准。例子。