Почему так много пространств имен начинаются с com


45

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

Также обратите внимание на такие вопросы, как: https://stackoverflow.com/questions/189209/do-you-really-use-your-reverse-domain-for-package-naming-in-java, что-то вроде ответа на мой вопрос, но не 100 %

(Если это заставляет вас чувствовать себя лучше, мне действительно любопытно, стоит ли мне использовать его для моих усилий по созданию пространства имен javascript, но мне больше интересно узнать, когда и почему, и это должно помочь мне в ответе на javascript, nota Bene: "окно")

Пример этой практики распространяется на папки и файлы: http://imgur.com/jtdXo


1
Это странно, я никогда не видел этого раньше ... теперь мне любопытно.
Джимми Хоффа

Ответы:


54

Обратная доменная нотация берет свое начало в Java, но широко используется во многих платформах, таких как пакеты Android, пакеты Mac OS X, JavaScript, ActionScript и многие другие.

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

Из Oracle Java Tutorials :

Компании используют обратное доменное имя в Интернете, чтобы начать имена своих пакетов, например, com.example.mypackage для пакета с именем mypackage, созданного программистом на example.com.

Конфликты имен, которые происходят в пределах одной компании, должны обрабатываться в рамках соглашения внутри этой компании, возможно, путем включения региона или названия проекта после названия компании (например, 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

Мне интересно, нашел ли кто-нибудь способ решить проблему с названием компании, которое начинается с числа, такого как 123ABC.com, какое соглашение об именах следует использовать в этом случае, когда Java не позволяет использовать имя класса, начинающееся с число?!
сорин

1
@sorin - префикс соответствующей части имени вашего пакета с подчеркиванием. Например, com._123ABC. Примеры на docs.oracle.com/javase/tutorial/java/package/namingpkgs.html .
cxw

13

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

Обращая доменную часть в пространстве имен, вы делаете ее сортируемой; все имена, которые принадлежат вашему маленькому фрагменту вселенной пространства имен, отсортированы вместе.

И последнее, но не менее важное: TLD .comявляется самым популярным TLD в Интернете, поэтому он используется большим количеством разработчиков программного обеспечения, чем любой другой TLD.

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


Это строго соблюдается? Предположим, я пытаюсь создать пакет com.xyz, но не владею доменом, будет ли Android мешать мне сделать это?
VarunAgw

@VarunAgw Нет, вы можете играть грязно и форсировать конфликты.
Мартейн Питерс

Кроме конфликтов, имеет смысл использовать OrgName.ProjectName для небольших проектов
VarunAgw

Вы будете летать перед лицом конвенции, но это ваш звонок.
Мартин Питерс

2

Порядок байтов

Я не эксперт по Java, но что касается общего паттерна, то это просто очередная перестановка байтов с прямым порядком байтов и, по меньшей мере, метафорически.

«Endianness» иногда используется для описания порядка компонентов доменного имени, например, «en.wikipedia.org» (обычная современная форма «little-endian») по сравнению с обратным DNS «org.wikipedia.en» ( 'big-endian', используется для именования компонентов, пакетов или типов в компьютерных системах, например, пакетов Java, файлов Macintosh ".plist" и т. д.). URL-адреса можно рассматривать как «с прямым порядком байтов», даже если часть узла может быть DNS-именем с прямым порядком байтов.

В этом случае, по-видимому, для организационных целей допускается естественная группировка / ветвление дерева. Это поддерживает порядок на более высоком уровне, и вы копаете для более конкретной детализации.

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


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

Я тоже этого не сделал, пока коллега не выбросил это в разговор и не породил какую-то неосторожную дискуссию. Он ref'd википедию (как связано с), так что, видимо, это не неслыханно. Мне пришлось немного расслабить свой буквальный ум, чтобы приспособиться к этой точке зрения, но я могу с этим смириться.
Эд Гастингс

3
Да, это обсуждение DNS endianness приходит периодически. У давнишней сети "Янус" в Великобритании были иные названия, и они всегда говорили, что толпа ARPANet получает вещи назад.
Росс Паттерсон

3
@RossPatterson: файловые системы, операционные системы, граненые системы классификации, системы хранения библиотек, телефонные номера, большинство из которых начинаются с корня слева, а затем уточняются. Черт, даже большинство файлов конфигурации DNS-серверов делают это таким образом. Итак, я бы согласился с толпой Януса.
Йорг Миттаг

1
@RossPatterson Учитывая их имя, я удивлен, что у Януса есть мнение о том, что считать «правильным путем».
Триг

0

Я думаю, что незначительная деталь не была упомянута в других ответах: причина того, что домен верхнего уровня .com является наиболее популярным, заключается в том, что в первые дни Интернета веб-браузеры, такие как Netscape Navigator, автоматически добавлялись. он отсутствовал в адресе (например, если поиск по имени не удался). Поэтому, если вы введете «shareware», оно будет расширено до « http://shareware.com » (или « http://www.shareware.com »; я не помню подробности www). Домены .com, вероятно, по-прежнему наиболее популярны.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.