您真的使用java中的反向域来命名包吗?

您真的使用java中的反向域来命名包吗?,java,namespaces,Java,Namespaces,很久以前,我一直认为,在java中,将您拥有的域用于包命名是愚蠢和笨拙的 在您的项目中,包命名使用哪种方法?我实际上认为反向域名包命名是Java中更出色的约定之一。是的,我使用反向域名作为包的开始,然后是其他管理信息(项目、部门等)。使用域将供应商/公司/自由和开放源码软件项目之间发生冲突的可能性降至最低。由于域名的原因,我的“数据”包不会与其他公司的数据包发生冲突 我还使用了为内部工作或不打算用于外部使用的类(可能是未记录的支持库等)删除tld的约定。这通常会让其他开发人员明白,不同的规则或策

很久以前,我一直认为,在java中,将您拥有的域用于包命名是愚蠢和笨拙的


在您的项目中,包命名使用哪种方法?

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

是的,我使用反向域名作为包的开始,然后是其他管理信息(项目、部门等)。使用域将供应商/公司/自由和开放源码软件项目之间发生冲突的可能性降至最低。由于域名的原因,我的“数据”包不会与其他公司的数据包发生冲突

我还使用了为内部工作或不打算用于外部使用的类(可能是未记录的支持库等)删除tld的约定。这通常会让其他开发人员明白,不同的规则或策略可能会应用于代码块


与不遵循任何规则或既定模式的任意名称空间相比,使用反向域的混乱程度要小得多。

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


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

我对所有项目都这样做,甚至将其带到了我的.NET命名空间应用程序中。

我自己觉得这很愚蠢。com。这个部分实际上只增加了4个额外的字符。此外,我认为在程序集/项目名称中使用公司名称也是错误的。我在太多的地方工作过,这些地方与另一家公司合并,或者干脆改名

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

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

这项计划有两个重要作用:

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

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

我们通常不扩展JAR,但在早期java开发中,这很重要,因为人们对小程序使用扩展的dir结构


然而,这很好,因为源代码目录结构有一种非常“自上而下”的感觉。从最通用的(com、org、net…)到不太通用的(公司名称),再到更具体的(项目/产品/库名称)。

它非常有用,可以被其他人复制(例如XML模式)


它在“大型”(考虑到WWW)中很有用,但在跨部门(即小型)中可能更有用。对于较小的项目来说,它可能显得过于臃肿,但它就像一种保险:当你以后需要它时,它就在那里。

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

[company].[project].[sub].xyz(.abc)
其中,
sub
通常是
客户端
公共
服务器
中的一个。如果我在一家(商业)软件公司工作,我会更不愿意使用
项目
位,因为很可能应用程序在项目开始时的调用和完成时的调用是两个完全不同的东西!谨此致辞:

oak.lang.Object

我非常喜欢这种方法,以至于经常让我想知道为什么域名是按顺序排列的。主机上的路径从general->specific开始,但subdomain.domain.tld从specific->general开始。不一致性。。。必须重构…因为编程在internet(www爆炸)之前就已经出现了,所以应该知道internet URL寻址方案使用的是反向包/名称空间命名方案。顺便说一句,反之亦然:P.com部件确保包名是唯一的。不同的公司可能拥有.com、.net、.org等域名。加上国家代码--au.com.blahblah…为了使名称独特,我认为没有必要这样做。“com.mycompany.myapp”对我来说有点奇怪,没用。它可能是“mycompany.com.myapp”。它将解决独特性的目的,同时避免怪异+1代表从那个形状的盒子里思考,+1代表橡木!很好,呵呵…这个惯例建议人们在拥有域名之前不要开发包。这是一种犯罪:)标准MS名称空间不是以com.*或org.*开头的,它是CompanyName.Utils.*或CompanyName.UI.Extensions.*。没有com.*前缀的公司名称将代码和包完美地分开。@Artru这就是为什么Java开发人员认为不使用com和org来实现唯一性的Microsoft人是愚蠢的。但是否需要一家拥有2个tld的单一公司的独特性是值得怀疑的。