it-swarm-eu.dev

Ist die Java Paketnamenkonvention fehlerhaft?

Wir alle kennen die Konvention für den Paketnamen Java, mit der der Domainname umgedreht wird. Das heißt, www.evilcorp.com Würde sich konventionell dafür entscheiden, ihre Java -Pakete com.evilcorp.stuff Zu haben.

Zunehmend habe ich es satt. Als kommerzieller Programmierer stelle ich immer wieder fest, dass der Name des Softwarepakets aufgrund eines Rebrands, einer Akquisition oder ähnlichem völlig irrelevant ist.

In der OpenSource-Welt gibt es weniger Namensänderungen, daher ist dies sinnvoll. Es scheint mir jedoch, dass die Haltbarkeit vieler (kommerzieller/interner) Software viel länger ist als die der Organisation, die sie herstellt.

Das Problem wird häufig durch Softwareprojekte verschlimmert, bei denen die Marketingabteilung den Namen du jour verwendet, der sich auf ein bestimmtes Projekt bezieht. Ein Name, der sich 3 Monate später ändern wird, damit sich die neuen Kleider des Kaisers frisch und neu anfühlen.

Aus diesem Grund habe ich die Verwendung der Reverse Domain als Paketname größtenteils eingestellt. Zugegeben, wenn dies in großem Umfang erfolgt, besteht das Risiko von Namenskollisionen, aber dies wird sicherlich dadurch gemindert, dass entweder "eindeutige" Softwarennamen verwendet werden, generische Wörter vermieden werden oder die umgekehrte Domäne für Projekte verwendet wird, die als Bibliotheken verkauft/veröffentlicht werden sollen .

Andere Gedanken?

28
Martin Algesten

Ich werde das Ratschläge, die Microsoft für Namespaces gibt (.NET-Pakete) zitieren, das nicht die Domainnamen-Konvention hat. Ich denke, es ist ein guter Rat für Java Pakete auch, da ich nicht glaube, dass ein Domainname eine solide und stabile Identität darstellt.

Das allgemeine Format für einen Namespace-Namen lautet wie folgt:

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

Beispielsweise, Microsoft.WindowsMobile.DirectX.

Führen Sie Präfix-Namespace-Namen mit einem Firmennamen durch, um zu verhindern, dass Namespaces verschiedener Unternehmen denselben Namen und dasselbe Präfix haben.

Verwenden Sie einen stabilen, versionunabhängigen Produktnamen auf der zweiten Ebene eines Namespace-Namens.

Verwenden Sie keine Organisationshierarchien als Grundlage für Namen in Namespace-Hierarchien, da Gruppennamen in Unternehmen in der Regel nur von kurzer Dauer sind.

Der Namespace-Name ist eine langlebige und unveränderliche Kennung. Während sich Organisationen weiterentwickeln, sollten Änderungen den Namespace-Namen nicht überflüssig machen.

Wenn sogar Ihr Firmenname instabil ist, möchten Sie möglicherweise nur mit dem Produktnamen beginnen.

23
Allon Guralnek

Sie suchen nach einer Lösung für ein anderes Problem: Wie vermeiden wir, dass sich Programmierer X und Programmierer Y gegenseitig auf die Zehen treten, indem wir Dateien in dasselbe Paket einfügen?.

Die Option "Umkehren Sie einfach Ihren Domain-Namen" lösen dies auf elegante Weise, da Sie dann ziemlich sicher sind, dass X und Y, wenn sie nicht miteinander verbunden sind, nicht denselben Paketnamenbereich auswählen.

15
user1249

Die Konvention ist nicht fehlerhaft. Die Leute sind fehlerhaft, wie Sie sich gut dargestellt haben.

Ich kann mir 2 Vorteile vorstellen:

  1. Es vermeidet Kollisionen zwischen unabhängigen Entwicklern. Eine Domain ist einzigartig. Zwei Personen können zwei verschiedene Projekte gleich benennen, aber eine Domain hat genau einen Eigentümer.
  2. Dies erleichtert das Auffinden des Betreuers. Wenn Sie eine Codebasis erben, die eine Open-Source-Bibliothek verwendet, befindet sich diese besser in einem Paket, das Ihnen beim Auffinden hilft. Inzwischen spielt es keine Rolle mehr, denn Sie werden es mit Sicherheit googeln können. Aber vor 10 Jahren war das nicht so offensichtlich.
10
back2dos

Der umgekehrte Domänenname wurde verwendet, um Namenskollisionen zu vermeiden, falls verschiedene Organisationen dieselben Klassennamen in ihren Bibliotheken verwenden. Es ist eine einfache Lösung und hat natürlich einige Nachteile (z. B. was ist mit Namenskollisionen für Klassen in derselben Organisation?).

Sie sind nicht verpflichtet, es zu verwenden, es ist eine Konvention, keine Do or Die-Regel. Zum Beispiel respektieren einige Java Programmierer die Java Code Conventions nicht.

Aber überlegen Sie sich die Alternativen. Wie würden Sie zum Beispiel zwei vollständig qualifizierte Klassennamen für eine LogFactory mögen:

a50e8400_e29b_41d4_a716_446655440000.LogFactory
f47ac10b_58cc_4372_a567_0e02b2c3d479.Logfactory

oder

org.Apache.commons.logging.LogFactory
com.evilcorp.logging.LogFactory

Verwenden Sie in meinen Gedanken also alles, was Sie möchten, solange dies den gesunden Menschenverstand und eine Rücksichtnahme auf die Benutzer Ihrer Bibliothek beinhaltet.

7
user7197

Wenn ich ein neues Projekt starte, bestehe ich immer auf einem internen und unveränderlichen Namen, den die Marketingmitarbeiter möglicherweise kennen oder nicht kennen, da er nur im Quellcode erwähnt wird. Auf diese Weise muss ich mich nicht um Änderungen des Projektnamens und die Verschmutzung des Namespaces kümmern.

Dieses Szenario passt zu mir, da der Quellcode normalerweise kein wichtiger Bestandteil des Produkts ist, d. H. Projekte sind normalerweise proprietäre Systeme mit geschlossenen Quellen. In Open-Source-Projekten, bei denen der Quellcode das Produkt ist, ist dies jedoch möglicherweise nicht möglich.

4
SWeko