你真的在java中使用你的反向域来命名包吗? [关闭]
Posted
技术标签:
【中文标题】你真的在java中使用你的反向域来命名包吗? [关闭]【英文标题】:Do you really use your reverse domain for package naming in java? [closed] 【发布时间】:2010-09-16 09:29:34 【问题描述】:很久以前,我一直认为,在java中,为了包命名而反转你拥有的域是愚蠢和尴尬的。
您在项目中使用哪个包命名?
【问题讨论】:
见programmers.stackexchange.com/q/21943/24257 这个约定建议人们在拥有域名之前不要开发包。 【参考方案1】:一旦您了解了约定存在的原因,就不会感到愚蠢或尴尬。
这个方案做了两个重要的事情:
您的所有代码都包含在其他人不会与之发生冲突的包中。您拥有自己的域名,因此它是孤立的。如果我们没有这个约定,很多公司都会有一个“实用程序”包,其中包含“StringUtil”、“MessageUtil”等类。如果你试图使用其他人的代码,它们会很快发生冲突。
它的“反向”特性使得顶层的类目录布局非常狭窄。如果您展开一个 jar,您将看到“com”、“org”、“net”等目录,然后在每个目录下显示组织/公司名称。
(于 2021 年添加)如今,当这种类型的包命名用于第三方库时,这一点变得更加重要,这些库在构建过程中被引入,并且如果名称不是唯一的,则很容易发生冲突。如果每个人都遵守相同的约定,就不会发生意外的碰撞。
(2021 年添加)相同的命名约定可用于应用商店中的应用程序 ID,以确保唯一性。
我们通常不会扩展 jar,但在早期的 java 开发中,这很重要,因为人们使用扩展的 dir 结构来进行小程序。
但是,现在这很好,因为源代码目录结构具有非常“自上而下”的感觉。您从最通用的(com、org、net...)到不太通用的(公司名称)再到更具体的(项目/产品/lib 名称)。
【讨论】:
我非常喜欢这种方法,以至于它经常让我想知道为什么域名是它们的顺序。主机上的路径从一般-> 特定,但 subdomain.domain.tld 是特定->一般。不一致...必须重构... 由于编程首先出现在互联网(www 爆炸)之前,因此应该知道互联网 URL 寻址方案应该使用反向包/命名空间命名方案。顺便说一句,反之亦然:P.【参考方案2】:我认为这在很大程度上取决于正在编写的软件类型。例如,我为一家小公司开发内部系统,所以我选择:
[company].[project].[sub].xyz(.abc)
其中sub
通常是client
、common
和server
之一。如果我在一家(商业)软件公司工作,我会更不愿意使用project
位,因为很可能项目开始时调用的应用程序和完成时调用的应用程序是两个完全分开的东西!这是为了:
oak.lang.Object
【讨论】:
橡木+1!不错,呵呵...【参考方案3】:它非常有用并被其他人复制(例如 XML Schema)。
它在“大”(考虑到 WWW)中很有用,但在跨部门(即在小)中可能更有用。对于较小的项目来说,它可能看起来很臃肿,但它就像保险一样:当您以后需要时,它就在那里。
【讨论】:
【参考方案4】:是的,我使用反向域作为包的开头,然后是其他管理信息(项目、部门等)。域的使用最大限度地减少了供应商/公司/FOSS 项目之间发生冲突的机会。由于域,我的“数据”包不会与其他公司的数据包发生冲突。
我还使用了删除 tld 的惯例,用于内部工作或不适合外部使用的类(可能是未记录的支持库等)。这通常会让其他开发人员清楚地知道,不同的规则或策略可能适用于代码块。
与不遵循任何规则或既定模式的任意命名空间相比,使用反向域要少得多。
【讨论】:
【参考方案5】:是的,我什至设计了一个使用反向域命名约定在 javascript 中创建命名空间的方案,它使查找特定资产及其负责的内容变得更加容易,并且有助于防止名称冲突。
【讨论】:
【参考方案6】:我自己也觉得很傻。 com。部分实际上只添加了 4 个额外字符。另外,我认为在程序集/项目名称中使用公司名称也是错误的。我曾在太多与另一家公司合并或简单改名的地方工作过。
【讨论】:
com 部分确保包名是唯一的。不同的公司可能拥有 .com、.net、.org 等域。 加上国家代码 -- au.com.blahblah... 为了使名称独一无二,我认为没有必要这样做。 “com.mycompany.myapp”对我来说有点奇怪,没用。它可能是“mycompany.com.myapp”。它将解决唯一性目的,同时避免怪异。 +1 跳出那个形状的盒子。【参考方案7】:我为我的所有项目都这样做,我什至将其用于命名空间的 .NET 应用程序。
【讨论】:
这是犯罪 :) 标准 MS 命名空间不以 com.* 或 org.* 开头,它是 CompanyName.Utils.* 或 CompanyName.UI.Extensions.*。公司名称可以完美地分隔代码和包,无需 com.* 前缀。 @Artru 这就是为什么 Java 开发人员认为微软的人是愚蠢的,他们不使用 com 和 org 来实现唯一性。但是否需要拥有 2 个***域名的单一公司的独特性是值得怀疑的。【参考方案8】:如果它只是一个内部项目,并且代码不太可能被重用,那么我通常会使用简短的描述性名称。
但是,如果代码要在外部使用或在另一个项目中重用,那么我倾向于使用反向域方案。它确保不会有任何包名冲突。
【讨论】:
【参考方案9】:我实际上认为反向域名包命名是 Java 中更出色的约定之一。
【讨论】:
以上是关于你真的在java中使用你的反向域来命名包吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章