为什么这么多名称空间以com开头


45

我注意到许多公司都使用“反向域名”名称空间,我很好奇这种做法的起源以及为什么这种做法会持续下去。它是否仅由于死记硬背而继续存在,还是这里可能缺少我想念的出色的体系结构概念?

还请注意以下问题:https ://stackoverflow.com/questions/189209/do-you-really-use-your-reverse-domain-for-package-naming-in-java,可以回答我的问题,但不能回答100 %

(如果让您感觉更好,我真的很好奇我是否应该将它用于我的javascript命名间隔工作,但是我对何时何地以及为什么这样更感到好奇,这应该可以帮助我指导javascript答案,而不是bene:“窗口”)

这种做法的示例扩展到文件夹和文件: http://imgur.com/jtdXo


1
这很奇怪,我以前从未见过..现在我很好奇。
Jimmy Hoffa

Answers:


54

反向域表示法起源于Java,但已在许多平台中广泛使用,例如Android程序包,Mac OS X程序包,JavaScript,ActionScript等。

这种做法非常有用,因为它为命名空间软件提供了一个分散的系统。无需向中央机构申请名称空间;只需使用您拥有(反向)的域名并在您自己的组织内进行管理。通过这样命名软件包,几乎可以确定代码不会与其他软件包冲突。

从Oracle的Java教程中

公司使用其反向的Internet域名来开始其程序包名称,例如com.example.mypackage表示由example.com的程序员创建的名为mypackage的程序包。

单个公司内部发生的名称冲突需要按照该公司内部的约定进行处理,也许可以通过在公司名称之后添加区域或项目名称(例如com.example.region.mypackage)来解决。

这不仅是死记硬背的做法,也是个好习惯,因为它是一个完整且完全特定的名称空间。如果有两家名为Acme的公司并且都选择了名称空间acme.,则它们的代码将发生冲突。但是这些公司中只有一个可以拥有acme.com域,因此他们可以使用com.acme.名称空间。

反向域名允许自上而下的体系结构。com将包含公司(或拥有.com域名的任何人)的代码,以及在公司(域名)名下的代码。然后,组织和/或实际名称空间的结构将更深入。(例如,如果它是来自名为internal.acme.com的网络的代码,则为该部门提供了自己的子命名空间com.acme。)这种自上而下的结构用于许多应用程序中,包括系统管理中。(类似于反向IP地址查找。)

就个人而言,我将其用于为公司编写的所有新JavaScript代码。即使我以后为另一家公司编写相同的代码,它也可以确保该代码永远不会与任何其他代码冲突。它可以使访问代码变得麻烦(键入com.digitalfruition.可能会花很多时间),但是可以很方便地使用闭包和局部变量(var DF = com.digitalfruition)解决该问题。


我应该考虑更改我的Android应用的随机程序包名称...或购买该域。:(
jadkik94,2012年

我想知道是否有人找到一种方法来解决以123ABC.com之类的数字开头的公司名称的问题,在这种情况下您应该使用哪种命名约定,而Java不允许您使用任何以以下名称开头的类名一个号码?!
索林2014年

1
@sorin-在软件包名称的相关部分下划线加前缀。例如com._123ABCdocs.oracle.com/javase/tutorial/java/package/namingpkgs.html上的示例。
cxw

13

这是因为使用名称空间可极大地减少名称冲突的可能性,并且因为使用您的域名(已经受到监管)是创建全局名称空间的好方法。

通过反转名称空间中的域部分,可以使其可排序;属于您的命名空间Universe的所有小部分的所有名称都被排序在一起。

最后但并非最不重要的.com一点是,TLD 是互联网上最受欢迎的TLD,因此与其他任何TLD相比,它被更多的软件开发人员使用。

无论如何,实践都是从Java开始的,在Java中,每个类都需要拥有自己的文件,并且为了在更大的生态系统中发挥作用,引入了全局名称空间方案以帮助使类易于合格。


是否严格执行?假设我尝试创建包com.xyz但不拥有该域,android会阻止我这样做吗?
VarunAgw

@VarunAgw不,您可以玩肮脏并强迫冲突。
马丁·皮特斯

除了冲突之外,对于小型项目,使用OrgName.ProjectName则更有意义
-VarunAgw

您可能会遇到常规问题,但这是您的要求。
马丁·彼得

2

字节序

我不是Java专家,但是就一般模式而言,这只是比喻大端与小端的另一个排列。

有时使用“字节序”来描述域名组成部分的顺序,例如“ en.wikipedia.org”(通常是现代的“小尾数”形式)与反向DNS“ org.wikipedia.en”( “ big-endian”,用于命名计算机系统中的组件,程序包或类型,例如Java程序包,Macintosh的“ .plist”文件等)。即使主机部分可以是“小尾数” DNS名称,URL也可以视为“大尾数”。

在这种情况下,其大概是出于组织目的而允许自然分组/树状分支。它可以使事情保持较高层次的整洁,并且您可以挖掘更具体的细节。

替代方案将非常扁平,并且必须解释有意义/潜在有用的分组而不是结构固有的分组。


7
天哪,从来没有听说过字节序用来指反向域命名空间方案..
的Martijn Pieters的

我也没有,直到一个同事在一次对话中把它扔出去并引发了一些切切的讨论。他引用了维基百科(与之相关),因此显然并非闻所未闻。为了适应这种观点,我不得不放松一下字面意思,但是我可以接受。
Ed Hastings

3
是的,有关DNS字节序的讨论会定期进行。在英国,已经很久没有了的“ Janus”网络反过来又有它的名字,他们总是说ARPANet人群使事情倒退了。
罗斯·帕特森

3
@RossPatterson:文件系统,操作系统,分面分类系统,库归档系统,电话号码,其中大多数以左侧的根开头,然后更加具体。哎呀,即使大多数DNS名称服务器配置文件都采用这种方式。所以,我同意Janus人群。
约尔格W¯¯米塔格

1
@RossPatterson给出了他们的名字,我很惊讶Janus对什么才是“正确的解决方法”持意见。
TRiG 2014年

0

我认为其他答案中没有提到一个小细节:.com TLD最受欢迎的原因是,在Web的早期,像Netscape Navigator这样的Web浏览器“自动附加” .com的原因是:地址中缺少它(例如,如果名称查找失败)。因此,如果您输入“ shareware”,它将扩展为“ http://shareware.com ”(或“ http://www.shareware.com ”;我不记得www的详细信息)。.com域名可能仍然是最受欢迎的域名。

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.