Por que tantos namespaces começam com

45

Percebi que muitas empresas usam espaços para nome "nome de domínio reverso" e estou curioso para saber onde essa prática se originou e por que ela continua. Simplesmente continua por causa da prática rotineira, ou existe um excelente conceito de arquitetura que possa estar faltando aqui?

Observe também questões como: https://stackoverflow.com/questions/189209/do-you-really-use-your-reverse-domain-for-package-naming-in-java que meio que respondem à minha pergunta, mas não 100 %

(Se isso faz você se sentir melhor, estou muito curioso para saber se devo usá-lo para meus esforços de espaçamento de nomes javascript, mas estou mais curioso sobre quando e por que, e isso deve me ajudar na resposta do javascript. bene: "janela")

Exemplo desta prática que se estende a pastas e arquivos: http://imgur.com/jtdXo

jcolebrand
fonte
1
Isso é estranho, eu nunca vi isso antes .. agora estou curioso.
precisa

Respostas:

54

A Notação de Domínio Reverso tem origem em Java, mas é amplamente usada em muitas plataformas, como Pacotes Android, Pacotes Mac OS X, JavaScript, ActionScript e muito mais.

A prática é extremamente útil porque fornece um sistema descentralizado para software de namespacing. Não há necessidade de solicitar a uma agência centralizada um espaço para nome; basta usar o nome de domínio que você possui (revertido) e gerenciá-lo em sua própria organização. Ao nomear pacotes como este, pode-se ter quase certeza de que o código não entrará em conflito com outros pacotes.

Dos tutoriais Java da Oracle :

As empresas usam seu nome de domínio da Internet invertido para iniciar seus nomes de pacotes, por exemplo, com.example.mypackage para um pacote chamado mypackage criado por um programador em example.com.

As colisões de nomes que ocorrem em uma única empresa precisam ser tratadas por convenção nessa empresa, talvez incluindo a região ou o nome do projeto após o nome da empresa (por exemplo, com.example.region.mypackage).

É mais do que uma prática rotineira, é uma boa prática porque é um espaço para nome completo e totalmente específico . Se houvesse duas empresas nomeadas Acme e ambas escolhessem o espaço para nome acme., seu código entraria em conflito. Mas apenas uma dessas empresas pode ser proprietária do domínio acme.com , portanto, elas podem usar o com.acme.espaço para nome.

A reversão do nome de domínio permite uma arquitetura de cima para baixo. comconteria código para empresas (ou qualquer pessoa que possua um nome de domínio .com) e, por baixo, nomes de empresas (domínio). Então, mais profundamente dentro dela estaria a estrutura da organização e / ou o espaço para nome real. (Por exemplo, se fosse o código de uma rede chamada internal.acme.com , que desse ao departamento seu próprio sub-namespace com.acme.) Essa estrutura de cima para baixo é usada em vários aplicativos, inclusive na administração de sistemas. (É semelhante a pesquisas reversas de endereços IP.)

Pessoalmente, eu o uso para todos os novos códigos JavaScript que escrevo para minha empresa. Ele garante que o código nunca entrará em conflito com outro código, mesmo que mais tarde eu escreva o mesmo código para outra empresa. Isso pode dificultar o acesso ao código (digitar com.digitalfruition.pode ser um pouco demais), mas isso pode ser facilmente contornado com um fechamento e uma variável local ( var DF = com.digitalfruition).

Josh
fonte
Eu deveria estar pensando em alterar o nome do pacote aleatório do meu aplicativo Android ... ou comprar esse domínio. :(
jadkik94
Gostaria de saber se alguém encontrou uma maneira de resolver o problema de ter um nome de empresa que comece com um número como 123ABC.com, que convenção de nomenclatura você deve usar neste caso, em que Java não permitiria que você tivesse qualquer nome de classe começando com um número?!
sorin
1
@sorin - prefixe a parte relevante do nome do seu pacote com um sublinhado. Por exemplo com._123ABC,. Exemplos em docs.oracle.com/javase/tutorial/java/package/namingpkgs.html .
C2w
13

É porque o uso de espaços para nome reduz tremendamente as chances de conflitos de nomes e porque o uso do seu nome de domínio (que já foi regulamentado) é uma boa maneira de criar um espaço para nome global .

Ao reverter a parte do domínio no espaço para nome, você a classifica; todos os nomes que pertencem ao seu pequeno pedaço do universo do espaço para nome são classificados juntos.

E por último mas não menos importante, o TLD .comé o TLD mais popular da Internet, por isso é usado por mais desenvolvedores de software do que qualquer outro TLD.

De qualquer forma, a prática começou com Java, onde todas as classes precisam ter seu próprio arquivo e, para reproduzir em um ecossistema maior, o esquema de namespace global foi introduzido para ajudar a manter as classes fáceis de qualificar.

Martijn Pieters
fonte
É aplicado estritamente? Suponha que eu tente criar o pacote com.xyz, mas não possua o domínio. O Android me impedirá de fazê-lo?
VarunAgw
@VarunAgw, você pode jogar sujo e forçar conflitos.
Martijn Pieters
Além dos conflitos, faz mais sentido usar OrgName.ProjectName para pequenos projetos, então
VarunAgw 20/18
Você estaria voando em face da convenção, mas a decisão é sua.
Martijn Pieters
2

Endianness

Eu não sou um especialista em java, mas quanto ao padrão geral, isso é apenas outra permutação de big endian vs little endian, metaforicamente falando.

"Endianness" às vezes é usado para descrever a ordem dos componentes de um nome de domínio, por exemplo, 'en.wikipedia.org' (a forma moderna e comum de 'little-endian') versus o DNS reverso 'org.wikipedia.en' ( 'big-endian', usado para nomear componentes, pacotes ou tipos em sistemas de computador, por exemplo, pacotes Java, arquivos ".plist" do Macintosh, etc.). Os URLs podem ser considerados 'big-endian', mesmo que a parte do host possa ser um nome DNS 'little-endian'.

Nesse caso, é supostamente para fins organizacionais permitir o agrupamento natural / ramificação de árvores. Mantém as coisas arrumadas em um nível superior e você procura detalhes mais específicos.

A alternativa seria muito simples e o agrupamento significativo / potencialmente útil teria que ser interpretado versus intrínseco à estrutura.

Ed Hastings
fonte
7
Golly, endianness nunca ouvi usado para se referir ao esquema namespace inversa do domínio ..
Martijn Pieters
Eu também não, até que um colega falou em uma conversa e iniciou uma discussão tangencial. Ele consultou a wikipedia (como vinculada a), então, aparentemente, isso não é inédito. Tive que relaxar um pouco minha mente literal para acomodar esse ponto de vista, mas posso conviver com isso.
Ed Hastings
3
Sim, essa discussão sobre endianness do DNS ocorre periodicamente. A já extensa rede "Janus" no Reino Unido tinha seus nomes ao contrário, e eles sempre disseram que a multidão da ARPANet entendia tudo ao contrário.
Ross Patterson
3
@RossPatterson: sistemas de arquivos, sistemas operacionais, sistemas de classificação facetada, sistemas de arquivamento de bibliotecas, números de telefone, a maioria deles começa com a raiz à esquerda e fica mais específica. Heck, mesmo a maioria dos arquivos de configuração do servidor de nomes DNS faz dessa maneira. Então, eu concordo com a multidão de Janus.
Jörg W Mittag
1
@RossPatterson Dado o nome, estou surpreso que Janus tenha uma opinião sobre o que conta como "o caminho certo".
TRiG 21/11
0

Acho que um detalhe menor não foi mencionado nas outras respostas: a razão pela qual o TLD .com é o mais popular é que, nos primeiros dias da Web, navegadores da Web como o Netscape Navigator "anexavam automaticamente" .com se estava faltando no endereço (por exemplo, se a pesquisa de nome falhou). Portanto, se você digitar "shareware", ele será expandido para " http://shareware.com " (ou " http://www.shareware.com "; não me lembro dos detalhes do www). Os domínios .com provavelmente ainda são os mais populares.


fonte