Чи є помилковим умова назви пакету Java? [зачинено]


28

Ми всі знайомі з умовами імені пакета Java щодо перетворення доменного імені. Тобто www.evilcorp.com, за умовою, вони вирішили мати свої пакети java com.evilcorp.stuff.

Все частіше я набридаю цим. Як комерційний програміст, я знову і знову стикаюся з тим, що назва програмного пакета абсолютно не має значення через певну ребренду, придбання чи подібне.

У світі відкритих джерел менше змін імен, тому там є сенс. Однак мені здається, що термін зберігання багатьох програм (комерційного / внутрішнього) програмного забезпечення набагато довший, ніж у організації, яка їх виготовляє.

Проблему часто погіршують програмні проекти, які ведуть керівництво відділу маркетингу щодо використання назви du jour, яку вони використовують, стосуються певного проекту. Ім'я, яке, безумовно, зміниться на 3 місяці, щоб новий одяг імператора відчував себе свіжим і новим.

Через це я здебільшого перестала використовувати зворотний домен як назву пакета. Зрозуміло, що якщо це робиться у великих масштабах, існує ризик зіткнень з іменами, але, безумовно, це зменшується, використовуючи "унікальні" імена програмного забезпечення, уникаючи загальних слів, або використовуючи зворотний домен для проектів, призначених для продажу / випуску як бібліотеки .

Інші думки?


2
We're all familiar with the Java package name convention of turning the domain name around.- гм ... ні, ми не ... :)
доктор Ганнібал Лектер

8
@dr Hannibal Lecter: Досить просто. Java (на сайті Java.com) називає свої пакети com.java.etc.etc. Apache (на сайті Apache.org) називає свої пакети org.apache.etc.etc. Ви бачите візерунок.
doppelgreener


1
"У світі відкритих джерел менше змін імен" - навіть там є проблема, часто я бачу проекти, які зараз говорять github, але назви їхніх пакетів показують, що раніше вони знаходилися на звороті net.sourceforge.xxx або com. googlecode.xxx
нафг

@nafg - правильно. саме тому я схильний реєструвати власне доменне ім’я для будь-якого проекту з відкритим кодом, який я починаю працювати в ці дні, тому що я не обов'язково хочу прив’язати його особу до якоїсь конкретної корпорації (будь то джерела, наприклад, gіthub, що надає їй послуга, або така, як моя власна компанія, яка надала оригінальну мотивацію для її розвитку). Потрібно бути вільним, щоб бути власною справою.
Жуль

Відповіді:


23

Я процитую поради, які Microsoft дає щодо просторів імен (пакетів .NET), у яких немає домовленостей щодо доменних імен. Я думаю, що це корисна порада і для Java-пакетів, оскільки я не вірю, що ім'я домену являє собою міцну і стабільну ідентичність.

Загальний формат імені простори імен такий:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

Наприклад, Microsoft.WindowsMobile.DirectX.

Виконайте префіксні імена з іменем компанії, щоб у просторів імен різних компаній не було одного і того ж імені та префікса.

Використовуйте стабільну, незалежну від версії назву продукту на другому рівні імені простору імен.

Не використовуйте організаційні ієрархії як основу для імен в ієрархіях простору імен, оскільки назви груп у корпораціях, як правило, недовговічні.

Ім’я простору імен є довговічним і незмінним ідентифікатором. По мірі розвитку організацій зміни не повинні робити назву простору імен застарілим.

Якщо навіть назва вашої компанії нестабільна, ви можете просто почати з назви продукту.


3
Що вам рекомендують зробити Microsoft, якщо інша компанія має таку ж назву, як і ваша?

25
@ Thorbjørn - судовий процес
RevBingo

9
@ Thorbjørn: Простір імен, на відміну від домену, не є, і ним ніхто не може володіти. Це лише логічний поділ або категоризація коду. Шанси на зіткнення між вами та іншою компанією наближаються до нуля, якщо тільки інша компанія також не розробляє програмне забезпечення за тією ж технологією та має подібну пропозицію (коротше - ваш конкурент). У такому випадку я б прийняв пропозицію RebBingo, якщо тільки ви не гаразд з компанією, яка конкурує з такою ж назвою, як ваша компанія.
Аллон Гуралнек

4
Як вказувалося у відповіді @ Thorbjørn, проблема, яку вирішує конвенція про іменування Java, не гарантує сталість, а гарантує унікальність . Зверніть увагу, що конвенція Microsoft не гарантує жодного .
користувач359996

4
@ user359996: Як я вже сказав, я не розумію, чому універсальна унікальність - це проблема, яку потрібно вирішити. Чому б вам потрібні імена, щоб вони були унікальними у взаємовиключних базах коду? І стиль Java не гарантує цього, оскільки право власності на доменні імена може перемикатись на руки. Розробник, якому належить jUtils.com, може розробити бібліотеку com.jutils. *, Якою багато хто користується, а потім продати свій домен зовсім іншому розробнику, який розробляє іншу бібліотеку com.jutils. *, Яка також популярна, але має зіткнення з існуюча бібліотека.
Аллон Гуралнек

15

Ви дивитесь на вирішення іншої проблеми, а саме як нам уникнути того, що програміст X і програміст Y наступають один на одного пальцями ніг, поміщаючи файли в один пакет.

"Просто переверніть своє доменне ім'я" вирішуйте це елегантно, оскільки ви впевнені, що якщо X і Y не пов'язані між собою, вони не виберуть однаковий простір імен пакета.


+1 "Ви шукаєте рішення іншої проблеми."
користувач359996

10

Конвенція не є хибною. Люди недоліки, як ви чудово проілюстрували себе.

Я можу подумати про дві переваги:

  1. Це дозволяє уникнути зіткнення між незалежними розробниками. Домен унікальний. Двоє людей можуть назвати два різні проекти однаково, але домен має точно одного власника.
  2. Це полегшує пошук технічного обслуговування. Якщо ви успадковуєте кодову базу, яка використовує деяку бібліотеку з відкритим кодом, краще бути в пакеті, який допоможе вам її знайти. На сьогодні це насправді не має значення, тому що ви, безумовно, зможете гугл. Але 10 років тому це було не так очевидно.

7

Зворотне доменне ім’я було використано для уникнення зіткнень з іменами, якщо різні організації використовують у своїх бібліотеках однакові імена класів. Це просте рішення і поза увагою має деякі недоліки (наприклад, що стосується зіткнень з іменами для класів в одній організації?).

Ви не зобов'язані нею користуватися, це конвенція не правило робити чи не вмирати. Наприклад, деякі програмісти Java не дотримуються Конвенцій Java-коду .

Але розглянемо альтернативи. Як ви, наприклад, хотіли б два повноцінні назви класу для LogFactory:

a50e8400_e29b_41d4_a716_446655440000.LogFactory
f47ac10b_58cc_4372_a567_0e02b2c3d479.Logfactory

або

org.apache.commons.logging.LogFactory
com.evilcorp.logging.LogFactory

Тож, по-моєму, використовуйте все, що вам подобається, якщо це включає здоровий глузд і увагу до користувачів вашої бібліотеки.


4

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

Цей сценарій мені підходить, оскільки вихідний код зазвичай не є важливою частиною продукту, тобто проекти, як правило, є власною системою із закритим кодом. Однак у проектах з відкритим кодом, де вихідним кодом є продукт, це може бути неможливим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.