很久以前,我曾经想过,在java中,颠倒你拥有的用于包命名的域是愚蠢和笨拙的。
您在项目中使用哪个包命名?
答案 0 :(得分:68)
一旦你理解为什么会议存在,它至少不应该感到愚蠢或尴尬。
这个方案做了两件重要的事情:
您的所有代码都包含在其他任何人都不会碰撞的软件包中。您拥有自己的域名,因此它是孤立的。如果我们没有这个约定,很多公司会有一个“实用程序”包,包含类似“StringUtil”,“MessageUtil”等的类。如果你试图使用其他人的代码,这些会很快发生冲突。
它的“反向”性质使得顶层的类目录布局非常狭窄。如果你展开一个罐子,你会看到“com”,“org”,“net”等dirs,然后是每个组织/公司名称。
我们通常不会扩展jar,但在早期的Java开发中,这很重要,因为人们使用扩展的dir结构来实现applet。
然而,现在这很好,因为源代码目录结构具有非常“自上而下”的感觉。你从大多数通用(com,org,net ...)到较不通用(公司名称)到更具体(项目/产品/ lib名称)
答案 1 :(得分:18)
我实际上认为反向域名包命名是Java中更为出色的约定之一。
答案 2 :(得分:5)
如果它只是一个内部项目,并且代码不太可能被重用,那么我通常会使用简短的描述性名称。
但是,如果代码要在外部使用或在其他项目中重复使用,那么我倾向于使用反向域方案。它确保不会有任何包名冲突。
答案 3 :(得分:4)
我认为这在很大程度上取决于正在编写的软件类型。例如,我为一家小公司开发内部系统,所以我选择:
[company].[project].[sub].xyz(.abc)
sub
通常是client
,common
和server
之一。如果我在(商业)软件公司工作,我会更不愿意使用project
位,因为它可能是项目启动时调用应用程序的内容以及完成后调用的内容是两个完全不同的东西!这是:
oak.lang.Object
答案 4 :(得分:2)
答案 5 :(得分:1)
是的,我使用反向域来启动包,然后使用其他管理信息(项目,部门等)。域的使用最大限度地减少了供应商/公司/ FOSS项目之间发生冲突的可能性。由于域名,我的“数据”包不会与其他公司的数据包发生冲突。
我还使用了删除内部工作的tld或不适合外部使用的类(可能是未记录的支持库等)的约定。这通常使其他开发人员清楚地知道不同的规则或策略可能适用于代码块。
使用反向域比不遵循任何规则或已建立模式的任意命名空间更少混乱。
答案 6 :(得分:1)
我为所有项目执行此操作,我甚至将其用于我的.NET应用程序以获取命名空间。
答案 7 :(得分:1)
是的,我甚至设计了一个使用反向域命名约定在JavaScript中创建命名空间的方案,它使查找特定资产及其负责的内容变得更加容易,并且有助于防止名称冲突。
答案 8 :(得分:1)
它非常有用并且被其他人复制(例如XML Schema)。
它在'大'(给定WWW)中很有用,但在各个部门(即小型)中可能更有用。对于较小的项目来说,这似乎很臃肿,但它就像保险一样:它会在你以后需要的时候出现。