Warum beginnen so viele Namespaces mit com?


45

Ich habe festgestellt, dass viele Unternehmen "Reverse Domain Name" -Namensräume verwenden, und ich bin gespannt, woher diese Praxis stammt und warum sie so weitergeht. Geht es nur aus reinen Gründen weiter, oder fehlt mir hier vielleicht ein herausragendes Architekturkonzept?

Beachten Sie auch Fragen wie: https://stackoverflow.com/questions/189209/do-you-really-use-your-reverse-domain-for-package-naming-injava , die meine Frage beantworten, aber nicht 100 %

(Wenn Sie sich dadurch besser fühlen, bin ich wirklich neugierig, ob ich es für meine JavaScript-Namespacing-Bemühungen verwenden sollte, aber ich bin eher neugierig, wann und warum und das sollte mir bei der Javascript-Antwort helfen, nota bene: "fenster")

Beispiel für diese Praxis, die sich auf Ordner und Dateien erstreckt: http://imgur.com/jtdXo


1
Das ist seltsam, das habe ich noch nie gesehen. Jetzt bin ich neugierig.
Jimmy Hoffa

Antworten:


54

Reverse Domain Notation hat seinen Ursprung in Java, wird jedoch häufig auf vielen Plattformen verwendet, z. B. in Android-Paketen, Mac OS X-Paketen, JavaScript, ActionScript und anderen.

Die Übung ist äußerst nützlich, da sie ein dezentrales System für Namespace-Software bereitstellt. Es ist nicht erforderlich, einen Namespace bei einer zentralen Agentur zu beantragen. Verwenden Sie einfach den Domain-Namen, den Sie besitzen (umgekehrt), und verwalten Sie ihn in Ihrer eigenen Organisation. Durch die Benennung von Paketen wie diesem kann man fast sicher sein, dass Code nicht mit anderen Paketen in Konflikt gerät.

Aus den Java-Tutorials von Oracle :

Unternehmen verwenden ihren umgekehrten Internetdomänennamen, um ihre Paketnamen zu beginnen, z. B. com.example.mypackage für ein Paket mit dem Namen mypackage, das von einem Programmierer auf example.com erstellt wurde.

Namenskollisionen, die innerhalb einer einzelnen Firma auftreten, müssen nach Vereinbarung innerhalb dieser Firma behandelt werden, indem möglicherweise die Region oder der Projektname nach dem Firmennamen eingefügt wird (z. B. com.example.region.mypackage).

Es ist mehr als eine reine Übung, es ist eine gute Übung, da es sich um einen vollständigen und vollständig spezifischen Namespace handelt. Wenn es zwei Unternehmen mit dem Namen Acmeacme. gäbe und beide den Namespace gewählt hätten , würde der Code in Konflikt geraten. Da jedoch nur eines dieser Unternehmen die Domain acme.com besitzen kann , darf es den com.acme.Namespace verwenden.

Das Umkehren des Domainnamens ermöglicht eine Top-Down-Architektur. comwürde Code für Unternehmen enthalten (oder für jeden, der einen .com-Domainnamen besitzt), und darunter würde Firmennamen (Domainnamen) stehen. Weiter innen wäre dann die Struktur der Organisation und / oder der eigentliche Namespace. (Wenn es sich beispielsweise um Code aus einem Netzwerk namens internal.acme.com handelt, der dieser Abteilung einen eigenen Sub-Namespace gibt com.acme.) Diese Top-Down-Struktur wird in einer Reihe von Anwendungen verwendet, einschließlich in der Systemadministration. (Es ähnelt der umgekehrten Suche nach IP-Adressen.)

Ich persönlich benutze es für alle neuen JavaScript-Codes, die ich für mein Unternehmen schreibe. Es stellt sicher, dass der Code niemals mit einem anderen Code in Konflikt gerät, auch wenn ich später denselben Code für eine andere Firma schreibe. Es kann den Zugriff auf den Code umständlich machen (das Tippen com.digitalfruition.kann ein bisschen komplizierter werden), aber das kann leicht mit einem Abschluß und einer lokalen Variablen ( var DF = com.digitalfruition) umgangen werden .


Ich sollte daran denken, den zufälligen Paketnamen meiner Android-App zu ändern ... oder diese Domain zu kaufen. :(
jadkik94

Ich frage mich, ob jemand eine Möglichkeit gefunden hat, das Problem zu lösen, dass ein Firmenname mit einer Nummer wie 123ABC.com beginnt. Welche Namenskonvention sollten Sie in diesem Fall verwenden, wenn Java nicht zulässt, dass ein Klassenname mit "" beginnt eine Zahl?!
Sorin

1
@sorin - Stellen Sie dem relevanten Teil Ihres Paketnamens einen Unterstrich voran. ZB com._123ABC. Beispiele finden Sie unter docs.oracle.com/javase/tutorial/java/package/namingpkgs.html .
cxw

13

Dies liegt daran, dass die Verwendung von Namespaces das Risiko von Namenskonflikten erheblich verringert und die Verwendung Ihres Domainnamens (der bereits reguliert wurde) eine gute Möglichkeit ist, einen globalen Namespace zu erstellen .

Indem Sie den Domain-Teil im Namespace umkehren, können Sie ihn sortieren. Alle Namen, die zu Ihrem kleinen Teil des Namespace-Universums gehören, werden sortiert.

Last but not least ist die TLD .comdie beliebteste TLD im Internet, sodass sie von mehr Softwareentwicklern als jede andere TLD verwendet wird.

In jedem Fall begann die Praxis mit Java, wo jede Klasse ihre eigene Datei haben muss. Um in einem größeren Ökosystem zu spielen, wurde das globale Namespace-Schema eingeführt, um die Qualifizierung der Klassen zu vereinfachen.


Wird es strikt durchgesetzt? Angenommen, ich versuche, das Paket com.xyz zu erstellen, besitze aber nicht die Domain. Wird Android mich daran hindern, dies zu tun?
VarunAgw

@ VarunAgw Nö, du kannst schmutzig spielen und Konflikte erzwingen.
Martijn Pieters

Abgesehen von den Konflikten ist es sinnvoller, OrgName.ProjectName für kleine Projekte zu verwenden
VarunAgw

Sie würden gegen die Konvention fliegen, aber es ist Ihr Anruf.
Martijn Pieters

2

Endianness

Ich bin kein Java-Experte, aber in Bezug auf das allgemeine Muster ist dies, metaphorisch gesprochen, nur eine weitere Permutation von Big-Endian gegen Little-Endian.

"Endianness" wird manchmal verwendet, um die Reihenfolge der Komponenten eines Domainnamens zu beschreiben, z. B. "en.wikipedia.org" (die übliche moderne "Little-Endian" -Form) gegenüber dem umgekehrten DNS "org.wikipedia.de" ( 'big-endian' (wird zum Benennen von Komponenten, Paketen oder Typen in Computersystemen verwendet, z. B. Java-Pakete, Macintosh-Dateien ".plist" usw.). URLs können als "Big-Endian" betrachtet werden, obwohl der Host-Teil ein "Little-Endian" -DNS-Name sein kann.

In diesem Fall ist es vermutlich aus organisatorischen Gründen erforderlich, eine natürliche Gruppierung / Baumverzweigung zuzulassen. Es sorgt für Ordnung auf einer höheren Ebene, und Sie suchen nach genaueren Details.

Die Alternative wäre sehr flach und eine sinnvolle / potenziell nützliche Gruppierung müsste interpretiert werden, anstatt der Struktur eigen zu sein.


7
Golly, nie gehört Endianness verwendet, um das Reverse-Domain-Namespace-Schema zu beziehen ..
Martijn Pieters

Ich hatte es auch nicht getan, bis ein Kollege es in einem Gespräch rausschmiss und eine tangentiale Diskussion auslöste. Er verwies Wikipedia (wie verlinkt), so dass es anscheinend nicht ungewöhnlich ist. Ich musste meinen wörtlichen Verstand ein wenig entspannen, um diesem Standpunkt gerecht zu werden, aber ich kann damit leben.
Ed Hastings

3
Ja, diese Diskussion über DNS-Endianness wird regelmäßig geführt. Das mittlerweile längst vergangene "Janus" -Netzwerk in Großbritannien hatte den umgekehrten Namen und sie sagten immer, die ARPANet-Crowd habe die Sache rückgängig gemacht.
Ross Patterson

3
@ RossPatterson: Dateisysteme, Betriebssysteme, Facettierte Klassifizierungssysteme, Archivierungssysteme für Bibliotheken, Telefonnummern, die meisten von ihnen beginnen mit der Wurzel links und werden dann genauer. Selbst die meisten DNS-Nameserver-Konfigurationsdateien tun dies auf diese Weise. Also würde ich der Janus-Menge zustimmen.
Jörg W Mittag

1
@ RossPatterson Angesichts ihres Namens bin ich überrascht, dass Janus eine Meinung dazu hat, was als "der richtige Weg" gilt.
TRiG

0

Ich denke, ein kleines Detail wurde in den anderen Antworten nicht erwähnt: Der Grund, warum die .com-TLD die beliebteste ist, ist, dass in den frühen Tagen des Webs Webbrowser wie Netscape Navigator .com "automatisch anfügen", wenn es fehlte in der Adresse (zB wenn die Namenssuche fehlschlug). Wenn Sie also "Shareware" eingeben, wird es zu " http://shareware.com " (oder " http://www.shareware.com "; ich erinnere mich nicht an das WWW-Detail) erweitert. .com-Domains sind wahrscheinlich immer noch die beliebtesten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.