软件包名称应为单数还是复数?


226

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

com.myproject。XML .Element
com.myproject。SQL ■连接
com.myproject。用户。用户
com.myproject。用户 .UserFactory

但是,如果我有一个实际上包含单个类型的实现集合的包-例如任务,规则,处理程序,模型等,哪个更可取?

com.myproject。任务 .TakeOutGarbageTask
com.myproject。任务 .DoTheDishesTask
com.myproject。任务 .PaintTheHouseTask

要么

com.myproject。任务 .TakeOutGarbageTask
com.myproject。任务 .DoTheDishesTask
com.myproject。任务 .PaintTheHouseTask


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

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

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

@Renesis看看我最新的答案。
马修·罗达图斯

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

Answers:


291

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

类类似于数据库关系。数据库关系应以单数形式命名,因为其记录被视为该关系的实例。关系的功能是根据简单数据组成复杂的记录。

另一方面,包不是数据抽象。它有助于组织代码和解决命名冲突。如果程序包以单数命名,则并不意味着该程序包的每个成员都是该程序包的实例;它包含相关但异构的概念。如果以复数形式命名(通常 使用),我希望该程序包包含同类概念。

例如,类型应命名为TaskCollection而不是TasksCollection,因为它是包含的实例的集合Task。名为的包com.myproject.task并不意味着每个包含的类都是任务的实例。有可能是一个TaskHandler,一个TaskFactory,等命名为A包com.myproject.tasks,但是,将包含各种不同类型的所有任务:TakeOutGarbageTaskDoTheDishesTask,等。


13
有关类似问题,请参见english.stackexchange.com/q/25713。甲类别类似于单数和一个类型是类似于复数。
马修·罗达图斯

4
非常链接您提供显示了例外。beans是复数形式,但是java.beans包含所有与JavaBeans相关的类。
SkyDan 2012年

好的答案,但我不同意数据库关系逻辑。ERD中的关系是唯一的,因为它们显示了实体之间的关系。表是关系的物理实现,并且表包含多个行,因此应为多个IMO。答案为“此表中有什么?” 是“用户”而不是“用户”。诚然,在企业界(C#,Java)中,单数命名似乎比Ruby,Python,Javascript和PHP等社区更常见。
ryeguy

4
@SkyDan的评论指出了一些非常重要的事情,在这里被完全忽略了。在我看来,“ java.beans”的复数命名实际上是一个错误,它应该改为单数形式的“ java.bean”。
Vicky Chijwani,2015年

6
@VickyChijwani @SkyDan,因为JavaBeans™是商标,他们可能想按原样保留名称以指代该技术本身,因此他们使用了java.beans
Hejazi

1

这可能取决于特定的语言。在.NET(C#)中,如果可能发生名称空间类型名称冲突(type name expected but namespace found错误),则绝对应为复数形式。我已经处理了这一点,这很不愉快,并且导致整个代码中的类型名称过分限定。实例

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.