Pourquoi tant d’espaces de noms commencent par com


45

J'ai remarqué que de nombreuses entreprises utilisent des espaces de noms "noms de domaine inversés" et je suis curieux de savoir d'où provient cette pratique et pourquoi. Cela continue-t-il simplement à cause de la pratique par cœur, ou existe-t-il un concept d'architecture remarquable qui pourrait me manquer ici?

Notez également des questions telles que: https://stackoverflow.com/questions/189209/do-you-really-use-your-reverse-domain-for-package-naming-in-java ce genre de réponse à ma question mais pas 100 %

(Si cela vous aide à vous sentir mieux, je suis vraiment curieux de savoir si je devrais l'utiliser pour mes efforts de recherche de noms javascript, mais je suis plus curieux de savoir quand et pourquoi, et cela devrait m'aider à me guider sur la réponse javascript, nota bene: "fenêtre")

Exemple de cette pratique s’étendant aux dossiers et aux fichiers: http://imgur.com/jtdXo


1
C'est étrange, je n'ai jamais vu cela auparavant .. maintenant je suis curieux.
Jimmy Hoffa

Réponses:


54

La Notation de domaine inversée a ses origines en Java, mais elle est largement utilisée dans de nombreuses plates-formes, telles que les packages Android, les packages Mac OS X, JavaScript, ActionScript, etc.

Cette pratique est extrêmement utile car elle fournit un système décentralisé pour les logiciels d’espace de nommage. Il n'est pas nécessaire de demander à un organisme centralisé un espace de noms. utilisez simplement le nom de domaine que vous possédez (inversé) et gérez-le au sein de votre propre organisation. En nommant des paquets comme celui-ci, on peut être presque certain que le code ne sera pas en conflit avec d'autres paquets.

À partir des tutoriels Java d'Oracle :

Les entreprises utilisent leur nom de domaine Internet inversé pour commencer leurs noms de package, par exemple, com.example.mypackage pour un package nommé mypackage créé par un programmeur à example.com.

Les collisions de noms survenant au sein d'une même entreprise doivent être traitées par convention dans cette entreprise, par exemple en incluant la région ou le nom du projet après le nom de l'entreprise (par exemple, com.example.region.mypackage).

C'est plus qu'une pratique par cœur, c'est une bonne pratique car il s'agit d'un espace de noms complet et entièrement spécifique . S'il y avait deux sociétés nommées Acme et que les deux choisissaient l'espace de nom acme., leur code serait en conflit. Mais une seule de ces sociétés peut posséder le domaine acme.com et doit donc utiliser l’ com.acme.espace de noms.

L'inversion du nom de domaine permet une architecture descendante. comcontiendrait le code pour les entreprises (ou toute personne qui possède un nom de domaine .com), et dessous, les noms de société (de domaine). Ensuite, la structure de l’organisation et / ou l’espace de nommage lui-même seraient plus profonds. (Par exemple, s'il s'agit d'un code provenant d'un réseau appelé internal.acme.com , ce département dispose de son propre sous-espace de noms com.acme.) Cette structure descendante est utilisée dans un certain nombre d'applications, notamment dans l'administration des systèmes. (C'est similaire aux recherches inversées d'adresse IP.)

Personnellement, je l’utilise pour tous les nouveaux codes JavaScript que j’écris pour mon entreprise. Cela garantit que le code ne sera jamais en conflit avec un autre code, même si j'écris plus tard le même code pour une autre société. Cela peut rendre l'accès au code fastidieux (la saisie com.digitalfruition.peut être un peu fastidieuse ) mais cela peut facilement être contourné avec une fermeture et une variable locale ( var DF = com.digitalfruition).


Je devrais penser à changer le nom du paquet aléatoire de mon application Android ... ou acheter ce domaine. :(
jadkik94

Je me demande si quelqu'un a trouvé un moyen de résoudre le problème d'avoir un nom de société commençant par un numéro tel que 123ABC.com, quelle convention de dénomination devriez-vous utiliser dans ce cas, où Java ne vous permettrait pas d'avoir un nom de classe commençant par un numéro?!
sorin

1
@sorin - préfixez la partie pertinente du nom de votre paquet par un trait de soulignement. P. ex com._123ABC. Vous trouverez des exemples à docs.oracle.com/javase/tutorial/java/package/namingpkgs.html .
cxw

13

C'est parce que l'utilisation des espaces de noms réduit considérablement les risques de conflits de noms et que l'utilisation de votre nom de domaine (déjà réglementé) est un bon moyen de créer un espace de noms global .

En inversant la partie de domaine dans l’espace de noms, vous la rendez triable; tous les noms qui appartiennent à votre petit morceau de l'univers de l'espace de noms sont triés ensemble.

Enfin, le TLD .comest le plus populaire sur Internet. Il est donc utilisé par plus de développeurs de logiciels que tout autre TLD.

Dans tous les cas, la pratique a commencé avec Java, où chaque classe a besoin de posséder son propre fichier et de jouer dans un écosystème plus vaste, le schéma d'espace de noms global a été introduit pour permettre aux classes de rester qualifiées.


Est-ce strictement appliqué? Supposons que j'essaie de créer le package com.xyz mais que je ne possède pas le domaine, android m'empêche-t-il de le faire?
VarunAgw

@VarunAgw Nope, vous pouvez jouer des sales et des conflits de force.
Martijn Pieters

Outre les conflits, il est plus logique d'utiliser OrgName.ProjectName pour les petits projets, puis
VarunAgw

Vous seriez en violation de la convention, mais c'est votre appel.
Martijn Pieters

2

Endianité

Je ne suis pas un expert de Java, mais en ce qui concerne le schéma général, il ne s'agit que d'une autre permutation entre big-endian et little-endian, métaphoriquement.

"Endianness" est parfois utilisé pour décrire l'ordre des composants d'un nom de domaine, par exemple "en.wikipedia.org" (la forme moderne "little-endian" moderne) par opposition au DNS inversé "org.wikipedia.en" ( 'big-endian', utilisé pour nommer des composants, des packages ou des types dans des systèmes informatiques, par exemple des packages Java, des fichiers Macintosh ".plist", etc.). Les URL peuvent être considérées comme "big-endian", même si la partie hôte peut être un nom DNS "little-endian".

Dans ce cas, il est vraisemblablement à des fins organisationnelles de permettre un regroupement naturel / une ramification d’arbres. Cela permet de garder les choses à un niveau supérieur et de creuser pour obtenir des détails plus spécifiques.

L’alternative serait très plate, et un groupe significatif / potentiellement utile devrait être interprété plutôt que intrinsèque à la structure.


7
Golly, jamais entendu boutisme utilisé pour faire référence au schéma d'espace de noms inverse domaine ..
Martijn Pieters

Je ne l’avais pas fait non plus, jusqu’à ce qu’un collègue l’ait jeté dans une conversation et suscité une discussion tangentielle. Il s'est référé à wikipedia (comme lié à), donc apparemment ce n'est pas du jamais vu. J'ai dû un peu relâcher mon esprit pour accepter ce point de vue, mais je peux vivre avec.
Ed Hastings

3
Oui, cette discussion sur l'endianité du DNS revient périodiquement. Le réseau britannique "Janus", aujourd'hui disparu, s'appelait inversement et disait toujours que la foule d'ARPANet faisait reculer les choses.
Ross Patterson

3
@RossPatterson: Systèmes de fichiers, Systèmes d'exploitation, Systèmes de classification à facettes, Systèmes de classement pour bibliothèques, numéros de téléphone, la plupart d'entre eux commencent par la racine à gauche, puis deviennent plus spécifiques. Heck, même la plupart des fichiers de configuration du serveur de noms DNS le font de cette façon. Donc, je suis d'accord avec la foule Janus.
Jörg W Mittag

1
@ RossPatterson Étant donné leur nom, je suis surpris que Janus ait une opinion sur ce qui compte "comme le bon sens".
TRiG

0

Je pense qu’un détail mineur n’a pas été mentionné dans les autres réponses: La raison pour laquelle le TLD. .Com est le plus populaire, c’est que, dans les premiers jours du Web, les navigateurs Web comme Netscape Navigator "ajoutés automatiquement", si il manquait dans l'adresse (par exemple, si la recherche de nom a échoué). Donc, si vous tapez "shareware", il sera étendu à " http://shareware.com " (ou " http://www.shareware.com "; je ne me souviens pas du détail www). Les domaines .com sont probablement toujours les plus populaires.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.