Boas Práticas e Padrões de Código
Quem não seguir os padrões, paga o açai e o pão de queijo!
Adotar boas práticas e padrões de código é crucial para a manutenção e escalabilidade de projetos de software, especialmente em ambientes de equipe. Essas convenções ajudam a garantir que o código seja limpo, compreensível e eficiente.
Localização das Regras de Negócio
- Regras de Negócio: Devem ser mantidas no pacote
service, garantindo que a lógica esteja centralizada e separada da lógica de apresentação e acesso a dados.
Estrutura e Ordem do Conteúdo das Classes
-
Ordem do Conteúdo das classes: As classes classe devem seguir a seguinte ordem para facilidade de leitura
- @NoArgsConstructor
- @Getter
- @Setter
- Variáveis estáticas
- Variáveis de instância
- Construtores
- Métodos públicos
- Métodos privados auxiliares (ordenados logicamente ou por visibilidade)
Nomenclatura e Convenções
Quebra de Linha e Formatação
- Ao atingir 120 caracteres, uma quebra de linha deve ser inserida. Configuração recomendada em IDEs como IntelliJ IDEA para manter a uniformidade no projeto.
Evitar Acentuação
- Não utilize caracteres acentuados no código para evitar problemas de encoding e interoperabilidade entre diferentes ambientes de desenvolvimento.
Métodos e Variáveis
- Os nomes devem ser significativos e autoexplicativos, refletindo claramente o propósito da variável ou ação do método, evitando abreviações e promovendo a clareza.
- Exemplos de Variáveis:
questao,questaoEntity,qQuestaoEntity - Exemplos de Métodos:
adicionarQuestoesAoMaterial,buscarQuestoesPorTexto,atualizarOrdem
- Exemplos de Variáveis:
Domínio
- Utilize o nome diretamente para classes de domínio, sem prefixos ou sufixos adicionais.
- Exemplos:
Questao,Material
- Exemplos:
Entidades de Persistência
- Sufixo
Entity: As classes que representam entidades de persistência devem ter o sufixoEntity.- Exemplos:
QuestaoEntity,MaterialQuestaoEntity
- Exemplos:
Variáveis de Relacionamento na Persistência
- As variáveis que representam entidades relacionadas devem ter o sufixo
Entitypara clareza e consistência.- Exemplos:
private TopicoEntity nivelAnteriorEntity;private TopicoEntity topicoEntity;private DisciplinaEntity disciplinaEntity;
- Exemplos:
Nome da Tabela de Persistência
- O nome da tabela especificado na anotação
@Tablenão deve incluir o sufixoEntity.- Exemplos:
@Table(name = "topico")@Table(name = "topico_disciplina")
- Exemplos:
Chave Estrangeira da Persistência
- As chaves estrangeiras devem ser nomeadas sem o sufixo
Entity, mas devem terminar em_idpara indicar claramente a sua função.- Exemplos:
@JoinColumn(name = "nivel_anterior_id")@JoinColumn(name = "topico_id")@JoinColumn(name = "disciplina_id")
- Exemplos:
Variáveis do QueryDSL
- Prefixo
q: Utilize o prefixoqseguido do nome da entidade e o sufixoEntity.- Exemplos:
QQuestaoEntity qQuestaoEntity,QMaterialQuestaoEntity qMaterialQuestaoEntity
- Exemplos:
Separação de Lógica de Consulta
- Encapsule lógica de consulta em métodos privados para manter os métodos públicos limpos e focados.
Padronização de Mensagens
- As mensagens, especialmente as de erro, devem ser claras, corretamente pontuadas e sem erros de português. Utilize o arquivo
messages.propertiespara facilitar a gestão.
Nomenclatura Específica de Classes
Ex:
-
Controller:
NomeDaClasseController -
Api Mapper:
NomeDaClasseApiMapper -
DTO:
NomeDaClasseDTO -
Service:
NomeDaClasseService
Parâmetros de Métodos
- Quantidade de Parâmetros: Minimize a quantidade de parâmetros em métodos. Idealmente, um método não deve ter mais de três ou quatro parâmetros. Considere usar objetos de transferência de dados ou padrões como Builder para métodos com muitos parâmetros.
Penalidade
- Adesão aos Padrões: É crucial que todos na equipe sigam esses padrões. Quem não seguir, pode ser encarregado de trazer açaí e pão de queijo para o resto da equipe!!!.