Nomeação de Pacotes em Java

Bom, sou iniciante em java e em todo tutorial que leio a criação de classes se baseia no seguinte formato de pacote: pacote br.com.agenda.model , porque seguir esse modelo ? qual a boa prática envolvida nisso ?

Dá uma olhada neste artigo, é muito interessante, no seu caso é o item 9 mas o artigo todo é ótimo:

http://www.flaviojmendes.com/blog/2012/02/09/boas-praticas-em-java-guia-definitivo/

Bom, li mas confesso que não ficou muito claro. Porque eu deveria identificar no meu projeto um pacote com prefixo br.com ?

São parametrizações de boas praticas que permitem um melhor entendimento de um desenvolvimento

este site também tem mais informações de boas praticas, para responder sua pergunta o item A instrução package
http://www.sirmacstronger.eti.br/java/pacotesjava.php

resumindo:

br.com.empresa.nomePacote

o sistema ira ler da seguinte forma como exemplo: local\br\com\empresa\nomePacote.

Permitindo uma boa organização. Imagina criando apenas os pacotes na raiz sem organização.

Não precisa ser br.com. Digamos que sua empresa, ou universidade, ou sei lá onde você trabalha, tenha um domínio ac.jp, por exemplo:

keio.ac.jp

Então os pacotes produzidos seriam:

jp.ac.keio.pacote

e assim por diante.

Certo, mas no meu caso o sistema é local. COmo fica ?

Não existe obrigatoriedade, acontece que quando o sistema pertence a um domínio, aquele geralmente é o padrão.

Se você tem um serviço disponível no seu sistema, com um WSDL, quando alguém for gerar as classes automaticamente, através do wsimport por exemplo, se não me engano ele irá gerar o pacote com o domínio invertido, como o entanglement exemplificou.

Agora se isso não faz diferença pra você, deixe como achar mais “bonitinho” :slight_smile:

O motivo de seguir esse padrão é o classpath. Imagina que o teu sistema de pacotes vai virar uma estrutura de diretórios, com vários níveis de pastas e arquivos.

Agora pega todos os JARs que o teu sistema carrega, e imagina que cada um deles também vai virar uma estrutura de diretórios.

Agora, o que o Java faz quando carrega o teu sistema com esses JARs?

Ele pega todas essas estruturas de diretório e junta todas elas em uma só. Isso é o classpath.

Agora também imagine que você desenvolveu um arquivo MinhaClasse.java dentro de br.com.minhaempresa. E que outra empresa também criou um MinhaClasse.java dentro de br.com.minhaempresa. O que vai acontecer quando o Java carregar os dois JARs ao mesmo tempo? Provavelmente o teu sistema vai explodir.

O uso desse padrão de pacotes é para prevenir que isso aconteça.

BTW, isso é uma problema comum quando se usa dependências. Uma dependencia depende do Hibernate 3.3, a outra depende do 3.6. Boom.

Por isso existe o OSGi e o Jigsaw(adiado para o Java 9) existem.