你真的在反向域中使用java中的包命名吗?

很久以前,我曾经想过,在java中,反转你拥有的域命名包是愚蠢和尴尬的。

您在项目中使用哪个包命名?

一旦你理解了约定存在的原因,它就不应该感到愚蠢或尴尬。

这个方案做了两件重要的事情:

  • 您的所有代码都包含在其他任何人都不会碰撞的包中。 您拥有自己的域名,因此它是孤立的。 如果我们没有这个约定,许多公司会有一个“实用程序”包,包含类似“StringUtil”,“MessageUtil”等的类。如果你试图使用其他人的代码,这些会很快发生冲突。

  • 它的“反向”性质使得类目录布局在顶层非常狭窄。 如果你展开一个jar子,你会看到“com”,“org”,“net”等dirs,然后在每个组织/公司名称下面。

我们通常不扩展jar,但在早期的Java开发中,这很重要,因为人们使用扩展的dir结构来实现applet。

但是,现在这很好,因为源代码目录结构具有非常“自上而下”的感觉。 你从大多数通用(com,org,net …)到较不通用(公司名称)到更具体(项目/产品/ lib名称)

我实际上认为反向域名包命名是Java中更为出色的约定之一。

如果它只是一个内部项目,并且代码不太可能被重用,那么我通常会使用简短的描述性名称。

但是,如果代码要在外部使用或在另一个项目中重用,那么我倾向于使用反向域方案。 它确保不会有任何包名冲突。

我认为这在很大程度上取决于正在编写什么类型的软件。 例如,我为一家小公司开发内部系统,所以我选择:

[company].[project].[sub].xyz(.abc) 

sub通常是clientcommon serverserver 。 如果我在(商业)软件公司工作,我会更不愿意使用project位,因为它可能是项目启动时调用应用程序的内容以及完成时调用的内容是两个完全独立的事情! 这是:

 oak.lang.Object 

我发现自己很傻。 com。 部分真的只添加4个额外字符。 另外,我认为在程序集/项目名称中使用公司名称也是错误的。 我曾经在太多的地方工作,与其他公司合并或只是重命名自己。

我为我的所有项目执行此操作,我甚至将其用于我的.NET应用程序以获取命名空间。

是的,我甚至设计了一个使用反向域命名约定在JavaScript中创建命名空间的方案,它使查找特定资产及其负责的内容变得更加容易,并且有助于防止名称冲突。

是的,我使用反向域来开始包,然后是其他管理信息(项目,部门等)。 域的使用最大限度地减少了供应商/公司/ FOSS项目之间发生冲突的可能性。 由于域名,我的“数据”包不会与其他公司的数据包发生冲突。

我还使用了删除tld用于内部工作的约定或不适合外部使用的类(可能是未记录的支持库等)。 这通常使其他开发人员清楚地知道不同的规则或策略可能适用于代码块。

使用反向域比不遵循任何规则或已建立模式的任意命名空间更少混乱。

它非常有用并被其他人复制(例如XML Schema)。

它在“大型”(给定WWW)中很有用,但在各个部门(即小型)中可能更有用。 对于较小的项目来说,它看起来可能很臃肿,但它就像保险一样:它会在你以后需要的时候出现。