Почему обратная нотация DNS используется для именования пакетов?

Есть техническая причина для использования обратной записи пакета DNS? Или это просто соглашение?

3 ответа

Решение

Sun использовал для поддержки руководства по стандартам кодирования Java - вы можете найти заархивированную копию на сайте Oracle здесь - в соответствии с этим сайтом он не поддерживается с 1999 года: http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

В части, содержащей рекомендации по именам пакетов, предлагается использовать доменные имена организации-владельца, сначала домен верхнего уровня: http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html

Префикс уникального имени пакета всегда пишется строчными буквами ASCII и должен быть одним из доменных имен верхнего уровня, в настоящее время com, edu, gov, mil, net, org или одним из английских двухбуквенных кодов. определение стран в соответствии со стандартом ISO 3166, 1981.

Последующие компоненты имени пакета различаются в соответствии с собственными внутренними соглашениями об именах организации. Такие соглашения могут указывать, что определенными компонентами имен каталогов являются имена подразделений, отделов, проектов, компьютеров или имен входа.

Я думаю, что это стало общепринятым стандартом в течение некоторого времени, хотя сегодня это не так строго соблюдается. Нет никаких причин, по которым вы не можете придумать шаблон именования для вашего проекта или организации, который имеет для вас наилучший смысл, - нет технической причины, по которой он должен следовать этому шаблону доменного имени.

Типичная схема, которой следуют сегодня, - сначала группы более высокого уровня (название организации или проекта), за которыми следуют все более и более конкретные группировки вплоть до наиболее специфических функциональных или технических группировок в названии "последний".

Я думаю, что сейчас это в основном просто конвенция, но я бы сказал, что это помогает упорядочить вещи.

Вот несколько примеров того, почему я так говорю:com.vzy.gui.* а также com.vzy.io.*

  • Проходя через них, мы видим, com и думаю: "О, это компания, которая сделала это"
  • затем vzy и подумайте "люди, которые сделали это, взы!"
  • затем gui а также io что заставляет нас видеть, что "этот работает с графическим интерфейсом, а другой работает с 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

Нет технической причины, есть только соглашение, позволяющее избежать конфликтов. Следующая ненормативная цитата из спецификации языка Java:

Разработчики должны предпринять шаги, чтобы избежать возможности двух опубликованных пакетов с одинаковыми именами, выбирая уникальные имена пакетов для широко распространенных пакетов...

Вы формируете уникальное имя пакета, сначала имея (или принадлежащий организации, которая имеет) имя домена в Интернете, например, oracle.com. Затем вы меняете это имя, компонент за компонентом, чтобы получить, в этом примере, com.oracle и используете его в качестве префикса для имен ваших пакетов, используя соглашение, разработанное в вашей организации для дальнейшего администрирования имен пакетов. Такое соглашение может указывать, что определенными компонентами имен пакетов являются имена подразделений, отделов, проектов, компьютеров или имен входа.

...

Имя пакета не подразумевает, где пакет хранится в Интернете. Предлагаемое соглашение для генерации уникальных имен пакетов - это просто способ объединить соглашение об именах пакетов с существующим, широко известным реестром уникальных имен вместо того, чтобы создавать отдельный реестр для имен пакетов.

Причина, по которой имя пакета является обратной последовательностью доменных имен, заключается просто в том, что имя пакета является полностью определенным именем. Каждый пакет содержит набор классов / интерфейсов и / или подпакетов, а имя подпакета должно начинаться с префикса содержащего его пакета, чтобы сформировать полное имя:

Полное имя именованного пакета, который является подпакетом другого именованного пакета, состоит из полностью определенного имени содержащего пакета, за которым следует ".", за которым следует простое (член) имя подпакета.

Другие вопросы по тегам