Вы действительно используете обратный домен для именования пакетов в java?

Давным-давно я думал, что в java менять принадлежащий вам домен для именования пакетов глупо и неудобно.

Что вы используете для именования пакетов в своих проектах?

См. programmers.stackexchange.com/q/21943/24257

Pacerier 13.06.2014 15:22

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

Gqqnbig 22.07.2019 03:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
24
2
9 221
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

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

Да, я использую обратный домен для начала пакета, за которым следует другая административная информация (проекты, отделы и т. д.). Использование домена сводит к минимуму вероятность столкновений между поставщиками / компаниями / проектами FOSS. Мой пакет «данных» не будет конфликтовать с пакетом данных другой компании благодаря домену.

Я также использовал соглашение об удалении tld для внутренней работы или классов, которые не предназначены для внешнего использования (возможно, недокументированные библиотеки поддержки и т. д.). Обычно это дает понять другим разработчикам, что к блоку кода могут применяться другие правила или политики.

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

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

Однако, если код будет использоваться извне или повторно в другом проекте, я предпочитаю использовать схему с обратным доменом. Это гарантирует, что не будет конфликтов имен пакетов.

Я делаю это для всех своих проектов, я даже перенес это в свои .NET-приложения для пространств имен.

Это преступление :) Стандартное пространство имен MS не начинается с com. * Или org. *, Это CompanyName.Utils. * Или CompanyName.UI.Extensions. *. Название компании отлично разделяет код и пакеты без префикса com. *.

Artru 03.09.2018 23:29

@Artru Вот почему разработчики Java считают глупыми людей из Microsoft, которые не используют com и org для достижения уникальности. Но необходимость уникальности единой компании с 2 тлд сомнительна.

Gqqnbig 22.07.2019 09:39

Я сам считаю это довольно глупым. Ком. часть действительно не добавляет ничего, кроме 4 дополнительных символов. Также я считаю неправильным использование названия компании в названии сборки / проекта. Я работал во многих местах, которые объединились с другой компанией или просто переименовали себя.

Часть com обеспечивает уникальность имени пакета. Домены .com, .net, .org и т. д. Могут принадлежать разным компаниям.

Dan Dyer 10.10.2008 02:09

Плюс коды стран - au.com.blahblah ...

Andrew 14.10.2008 13:17

Чтобы имя было уникальным, я вижу, что этого делать не нужно. com.mycompany.myapp для меня странно, бесполезно. Это может быть mycompany.com.myapp. Это решило бы цель уникальности, также избегая странностей. +1 за мыслить нестандартно.

Cesar 29.03.2018 00:13

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

Ответ принят как подходящий

Как только вы поймете, почему существует соглашение, оно не должно казаться глупым или неловким.

Эта схема делает две важные вещи:

  • Весь ваш код содержится в пакетах, с которыми никто другой не столкнется. Вы являетесь владельцем своего доменного имени, поэтому оно изолированно. Если бы у нас не было этого соглашения, у многих компаний был бы пакет «утилит», содержащий такие классы, как «StringUtil», «MessageUtil» и т. д. Они бы быстро столкнулись, если бы вы попытались использовать чей-то другой код.

  • Его «обратный» характер делает структуру каталогов классов очень узкой на верхнем уровне. Если вы развернете jar, вы увидите каталоги com, org, net и т. д., А затем под каждым из них название организации / компании.

Обычно мы не расширяем jar-файлы, но на ранних этапах разработки java это было важно, потому что люди использовали расширенные структуры dir для апплетов.

Однако сейчас это хорошо, так как структуры директорий исходного кода выглядят очень «сверху вниз». Вы переходите от наиболее общего (com, org, net ...) к менее общему (название компании) и к более конкретному (название проекта / продукта / библиотеки).

Мне настолько нравится этот подход, что он часто заставлял меня задаваться вопросом, почему доменные имена находятся в том порядке, в котором они находятся. Пути на хосте идут от общих до конкретных, а subdomain.domain.tld идет от общих до общих. Несоответствие ... необходимо провести рефакторинг ...

rmeador 10.10.2008 01:30

Поскольку программирование появилось раньше, чем Интернет (взрыв www), должно было быть известно, что схема адресации URL-адресов в Интернете использует вместо этого обратную схему именования пакетов / пространств имен. Кстати, как раз наоборот: P.

RBT 18.11.2016 05:25

Это очень полезно и копируется другими (например, XML-схема).

Это полезно в «больших» (учитывая WWW), но, возможно, в большей степени для разных отделов (то есть в малых). Для небольших проектов он может показаться раздутым, но действует как страховка: он всегда рядом, когда он понадобится вам позже.

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

[company].[project].[sub].xyz(.abc)

Где sub обычно является одним из client, common и server. Если бы я работал в (коммерческой) компании-разработчике программного обеспечения, я бы с гораздо большим нежеланием использовал бит project, потому что вполне вероятно, что то, что приложение было вызвано при запуске проекта, и то, что оно вызывается после его завершения, - два совершенно разных вещи! Вот чтобы:

oak.lang.Object

+1 за дуб! Хорошенький, хе-хе ...

Tash Pemhiwa 11.10.2013 16:16

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