7

使用反向 DNS 包表示法有技术原因吗?或者它只是一个约定?

4

3 回答 3

11

我认为它现在主要只是一个约定,但我会说它有助于将事情组织起来。

以下是我为什么这么说的几个例子: com.vzy.gui.*com.vzy.io.*

  • 通过它们,我们看到com并想,“哦,嘿,这是一家制造这个的公司”
  • 然后vzy想,“做这个的人是vzy!”
  • 然后guiio这让我们看到“这个与 GUI 一起工作,而另一个与 IO 一起工作,很酷。”

我认为另一种展示这一点的好方法是将它切换回来,看看它会是什么样子......

import ArrayList.util.java
import BorderLayout.awt.java
import File.io.java
import JButton.swing.javax
import JFrame.swing.javax
import JLabel.swing.javax
import JOptionPane.swing.javax
import JPanel.swing.javax
import JScrollPane.swing.javax
import JSlider.swing.javax
import LinkedBlockingQueue.concurrent.util.java
import PrintWriter.io.java
import Scanner.util.java
import SwingUtilities.swing.javax

或者

import java.awt.BorderLayout
import java.io.File
import java.io.PrintWriter
import java.util.ArrayList
import java.util.Scanner
import java.util.concurrent.LinkedBlockingQueue
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JOptionPane
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JSlider
import javax.swing.SwingUtilities
于 2015-08-19T16:37:41.253 回答
7

Sun 曾经维护 Java 编码标准指南 - 您可以在此处的 Oracle 站点上找到存档副本 - 根据该站点,自 1999 年以来一直没有维护: http ://www.oracle.com/technetwork/java/codeconvtoc- 136057.html

包名推荐的部分确实建议使用拥有组织的域名,首先是顶级域: http ://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367

唯一包名的前缀总是用全小写的 ASCII 字母写的,应该是顶级域名之一,目前是 com、edu、gov、mil、net、org 或英文两字母代码之一识别 ISO 标准 3166, 1981 中指定的国家/地区。

包名称的后续组成部分根据组织自己的内部命名约定而有所不同。这样的约定可能会指定某些目录名称组件是部门、部门、项目、机器或登录名。

我认为这在一段时间内已成为公认的标准,尽管它在今天并未得到严格遵守。您没有理由不能为您的项目或组织设计一个对您最有意义的命名模式 - 没有技术原因必须遵循此域名模式。

今天遵循的典型模式首先是更高级别的分组(组织或项目名称),然后是越来越具体的分组,最后是最具体的功能或技术分组。

于 2015-08-19T17:46:06.063 回答
4

没有技术原因,只有避免冲突的约定。以下来自Java 语言规范的非规范引用:

开发人员应采取措施,通过为广泛分布的软件包选择唯一的软件包名称来避免两个已发布的软件包具有相同名称的可能性......

您首先拥有(或属于拥有)互联网域名(例如 oracle.com)的组织,从而形成一个唯一的包名称。然后,您逐个组件地反转此名称,在此示例中获得 com.oracle,并将其用作您的包名称的前缀,使用您组织内开发的约定来进一步管理包名称。这样的约定可能会指定某些包名称组件是部门、部门、项目、机器或登录名。

...

包的名称并不意味着该包在 Internet 上的存储位置。生成唯一包名称的建议约定只是一种在现有的、广为人知的唯一名称注册表之上捎带包命名约定的方法,而不必为包名称创建单独的注册表。

包名与域名顺序相反的原因仅仅是因为包名是完全限定名。每个包都包含一组类/接口和/或子包,子包的名称必须以其包含的包为前缀,以形成完全限定的名称:

作为另一个命名包的子包的命名包的完全限定名由包含包的完全限定名,后跟“ .”,后跟子包的简单(成员)名称组成。

于 2015-08-19T16:50:24.563 回答