Perché tanti spazi dei nomi iniziano con com


45

Ho notato che molte aziende usano spazi dei nomi "reverse domain name" e sono curioso di sapere da dove provenga questa pratica e perché continui. Continua semplicemente a causa della pratica pratica, oppure esiste un concetto di architettura eccezionale che potrei perdere qui?

Nota anche domande come: https://stackoverflow.com/questions/189209/do-you-really-use-your-reverse-domain-for-package-naming-in-java che rispondono alla mia domanda ma non 100 %

(Se ti fa sentire meglio, sono davvero curioso se dovrei usarlo per i miei sforzi di spaziatura dei nomi javascript, ma sono più curioso di sapere quando e perché, e questo dovrebbe aiutarmi a guidare la risposta javascript, nota bene: "finestra")

Esempio di questa pratica che si estende a cartelle e file: http://imgur.com/jtdXo


1
Questo è strano, non l'ho mai visto prima .. ora sono curioso.
Jimmy Hoffa,

Risposte:


54

Reverse Domain Notation ha le sue origini in Java, ma è ampiamente usato in molte piattaforme, come pacchetti Android, pacchetti Mac OS X, JavaScript, ActionScript e altro.

La pratica è estremamente utile perché fornisce un sistema decentralizzato per software di spaziatura dei nomi. Non è necessario rivolgersi a un'agenzia centralizzata per uno spazio dei nomi; usa semplicemente il nome di dominio che possiedi (invertito) e gestiscilo all'interno della tua organizzazione. Nominando pacchetti come questo, si può essere quasi certi che il codice non entrerà in conflitto con altri pacchetti.

Dai tutorial Java di Oracle :

Le aziende usano il loro nome di dominio Internet invertito per iniziare i nomi dei loro pacchetti, ad esempio com.example.mypackage per un pacchetto chiamato mypackage creato da un programmatore su example.com.

Le collisioni di nomi che si verificano all'interno di una singola azienda devono essere gestite per convenzione all'interno di quella società, magari includendo la regione o il nome del progetto dopo il nome della società (ad esempio com.example.region.mypackage).

È più di una pratica normale, è una buona pratica perché è uno spazio dei nomi completo e completamente specifico . Se ci fossero due società di nome Acme ed entrambe scegliessero lo spazio dei nomi acme., il loro codice sarebbe in conflitto. Ma solo una di quelle aziende può possedere il dominio acme.com , quindi possono usare lo com.acme.spazio dei nomi.

L'inversione del nome di dominio consente un'architettura dall'alto verso il basso. comconterrebbe il codice per le società (o chiunque possieda un nome di dominio .com) e sotto i nomi di tali società (dominio). Quindi, più in profondità sarebbe la struttura dell'organizzazione e / o lo spazio dei nomi reale. (Ad esempio, se è stato il codice di una rete chiamata internal.acme.com , a dare a questo reparto il proprio spazio dei nomi secondari di com.acme.) Questa struttura top-down viene utilizzata in diverse applicazioni, inclusa l'amministrazione dei sistemi. (È simile alle ricerche inverse di indirizzi IP.)

Personalmente, lo uso per tutto il nuovo codice JavaScript che scrivo per la mia azienda. Assicura che il codice non entrerà mai in conflitto con nessun altro codice, anche se in seguito scrivo lo stesso codice per un'altra società. Può rendere l'accesso al codice ingombrante (la digitazione com.digitalfruition.può diventare un po 'troppo) ma può essere facilmente risolto con una chiusura e una variabile locale ( var DF = com.digitalfruition).


Dovrei pensare di cambiare il nome del pacchetto casuale della mia app Android ... o acquistare quel dominio. :(
jadkik94,

Mi chiedo se qualcuno abbia trovato un modo per risolvere il problema di avere un nome di società che inizia con un numero come 123ABC.com, quale convenzione di denominazione dovresti usare in questo caso, dove Java non ti permetterebbe di avere un nome di classe che inizi con un numero?!
Sorin,

1
@sorin - prefissa la parte rilevante del nome del tuo pacchetto con un trattino basso. Ad es com._123ABC. Esempi su docs.oracle.com/javase/tutorial/java/package/namingpkgs.html .
Cxw

13

È perché l'uso di spazi dei nomi riduce enormemente le possibilità di conflitti di nomi e perché l'uso del nome di dominio (che è già stato regolato) è un buon modo per creare uno spazio dei nomi globale .

Invertendo la parte del dominio nello spazio dei nomi, la si rende ordinabile; tutti i nomi che appartengono al tuo piccolo pezzo dell'universo dello spazio dei nomi sono ordinati insieme.

E, ultimo ma non meno importante, il TLD .comè il TLD più popolare su Internet, quindi viene utilizzato da più sviluppatori di software rispetto a qualsiasi altro TLD.

In ogni caso, la pratica è iniziata con Java, dove ogni classe deve avere il proprio file e per giocare in un ecosistema più ampio è stato introdotto lo schema globale dello spazio dei nomi per aiutare le classi a qualificarsi.


È applicato rigorosamente? Supponiamo che io provi a creare il pacchetto com.xyz ma non possiedo il dominio, Android mi impedirà di farlo?
VarunAgw,

@VarunAgw no, puoi giocare a sporchi e forzare conflitti.
Martijn Pieters,

Oltre ai conflitti, ha più senso usare OrgName.ProjectName per piccoli progetti allora
VarunAgw

Voleresti di fronte alla convenzione, ma è la tua chiamata.
Martijn Pieters,

2

endianness

Non sono un esperto di Java, ma per quanto riguarda il modello generale questa è solo un'altra permutazione del big-endian contro il little-endian, metaforicamente parlando.

"Endianness" viene talvolta utilizzato per descrivere l'ordine dei componenti di un nome di dominio, ad esempio "en.wikipedia.org" (la solita forma moderna "little endian") rispetto al DNS inverso "org.wikipedia.en" ( 'big-endian', usato per nominare componenti, pacchetti o tipi in sistemi informatici, ad esempio pacchetti Java, file ".plist" per Macintosh, ecc.). Gli URL possono essere considerati "big-endian", anche se la parte host potrebbe essere un nome DNS "little-endian".

In questo caso, è presumibilmente a fini organizzativi per consentire il raggruppamento naturale / ramificazione di alberi. Mantiene le cose in ordine a un livello superiore e scavi per dettagli più specifici.

L'alternativa sarebbe molto piatta e il raggruppamento significativo / potenzialmente utile dovrebbe essere interpretato anziché essere intrinseco alla struttura.


7
Golosamente, mai sentito l'endianesimo usato per riferirsi allo schema dello spazio dei nomi di dominio inverso.
Martijn Pieters,

Nemmeno io, fino a quando un collega non lo lanciò in una conversazione e generò una discussione tangenziale. Ha rifatto Wikipedia (come collegato a), quindi apparentemente non è inaudito. Ho dovuto rilassare un po 'la mia mente letterale per soddisfare questo punto di vista, ma posso conviverci.
Ed Hastings,

3
Sì, questa discussione sull'endianness DNS si svolge periodicamente. La rete "Janus" ormai lontana nel Regno Unito aveva i suoi nomi al contrario, e dicevano sempre che la folla di ARPANet aveva fatto cose all'indietro.
Ross Patterson,

3
@RossPatterson: filesystem, sistemi operativi, sistemi di classificazione sfaccettata, sistemi di archiviazione delle biblioteche, numeri di telefono, la maggior parte di essi inizia con il root a sinistra e diventa più specifico. Diamine, anche la maggior parte dei file di configurazione del server dei nomi DNS lo fanno in questo modo. Quindi, sarei d'accordo con la folla di Janus.
Jörg W Mittag il

1
@RossPatterson Dato il loro nome, sono sorpreso che Janus abbia un'opinione su ciò che conta come "il modo giusto".
TRiG

0

Penso che un dettaglio minore non sia stato menzionato nelle altre risposte: la ragione per cui il TLD .com è il più popolare, è che nei primi giorni del Web, i browser Web come Netscape Navigator "aggiungevano automaticamente" .com se mancava nell'indirizzo (es. se la ricerca del nome falliva). Quindi, se si digita "shareware", verrà espanso in " http://shareware.com " (o " http://www.shareware.com "; non ricordo i dettagli di www). I domini .com sono probabilmente ancora i più popolari.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.