Eu e minha equipe de P&D mantemos uma grande base de código. Dividimos nossa lógica de negócios em vários pacotes. alguns dos quais possuem classes com nomes idênticos .
Como você pode imaginar, os nomes entram em conflito quando as duas classes são referenciadas no mesmo arquivo Java.
Por exemplo:
com.myapp.model (package)
- Device (class)
- ...
com.myapp.data (package)
- Device (class)
- ...
Tivemos um debate sobre qual a melhor prática para tratar esses casos e surgiram as seguintes opções:
1ª Opção
Renomeando a classe, adicionando um prefixo
ModelDevice DataDevice
2ª Opção
Usando o pacote completo + nome da classe quando ambos são referenciados
com.myapp.model.Device com.myapp.data.Device
O que é mais correto em termos de gerenciamento de código e escalabilidade?
atualmente estamos misturando as duas abordagens e começando a ter inconsistência
java
coding-style
coding-standards
naming
conventions
Jossef Harush
fonte
fonte
java.util.Date
ejava.sql.Date
- especialmente porquejava.sql.Date
é uma subclassejava.util.Date
e muito bem sai das camadas de dados (e não serializa muito bem para JSON).Respostas:
Use o nome do pacote. Esse tipo de problema é precisamente o motivo pelo qual o Java usa a convenção de nomenclatura de pacotes. Isso evita esse tipo de problema, sejam duas equipes na mesma empresa ou duas equipes em lados opostos do mundo.
fonte
A partir de agora você tem uma classe ModelDevice (Dispositivo no pacote do modelo). E se você tiver outro ModelDevice para uma classificação diferente? O problema ainda pode persistir e as despesas gerais também continuarão aumentando.
Embora, por enquanto, você possa achar que renomear classes é de alguma ajuda, a longo prazo a alternativa sugerida é prefixar os nomes dos pacotes, que é o padrão da indústria.
fonte
Apenas para adicionar um aspecto que ainda não foi mencionado:
Veja os padrões de uso, ou seja, as fontes Java que fazem referência a uma ou ambas as classes.
IMHO, na maioria dos casos, os arquivos de origem devem fazer referência apenas a uma das classes conflitantes e, a partir do contexto, deve ficar claro se eles lidam com o modelo ou o mundo dos dados. Se isso for difícil, por qualquer motivo, renomeio as classes, pois geralmente não gosto de nomes de classes com prefixo de pacote no código-fonte (isso prejudica a legibilidade).
Se você possui arquivos de origem que lidam com os dois mundos, eles podem estar unindo classes com a resonsibilidade de traduzir entre duas visões diferentes do mundo, e aqui eu preferiria encontrar nomes de classes com prefixo de pacote.
Mas ver as duas classes de dispositivos em uma fonte também pode ser uma dica de que a fonte viola o princípio de responsabilidade única misturando tarefas do modelo e do mundo dos dados.
fonte