Skip to content

Padrões de Código

Daniel Mesquita edited this page Oct 12, 2024 · 3 revisions

Convenções de Nomenclatura

  • Classes: PascalCase (ex: UserController, AdoptionService)
  • Métodos e variáveis: camelCase (ex: getUserById, adoptionDate)
  • Constantes: UPPER_SNAKE_CASE (ex: MAX_ADOPTION_LIMIT)
  • Pacotes: minúsculas (já em conformidade)

Formatação

Utilizar o plugin fmt-maven-plugin para manter o padrão google-java-format, sempre antes de enviar um commit.

  • Executar mvn com.spotify.fmt:fmt-maven-plugin:format via linha de comando.

Padrões por Camada

Controllers

  • Sufixo: Controller
  • Responsabilidade: Manipular requisições HTTP, validação básica de entrada
  • Anotações comuns: @RestController, @RequestMapping

Services

  • Sufixo: Service
  • Responsabilidade: Lógica de negócios
  • Anotações comuns: @Service

Repositories

  • Sufixo: Repository
  • Responsabilidade: Interação com o banco de dados
  • Anotações comuns: @Repository

Models

  • Entities
    • Representam tabelas no banco de dados
    • Anotações comuns: @Entity, @Table
  • DTOs
    • Usados para transferência de dados entre camadas
    • Sufixo: DTO

Security

  • Configurações e classes relacionadas à segurança
  • Inclui configurações de autenticação e autorização

Exceptions

  • Exceções personalizadas do projeto
  • Nomenclatura: Sufixo Exception (ex: AdoptionLimitException)

Boas Práticas Gerais

  1. Princípio de Responsabilidade Única (SRP)
  2. Injeção de Dependência via construtor
  3. Métodos pequenos e focados
  4. Evitar código duplicado (DRY)
  5. Usar Lombok para reduzir boilerplate (ex: @Data, @Builder)

Segurança

  1. Validar todas as entradas do usuário
  2. Implementar autenticação e autorização adequadas
  3. Não expor informações sensíveis em logs ou respostas de erro
  4. Usar HTTPS em produção

Tratamento de Exceções

  1. Criar exceções personalizadas quando necessário
  2. Usar @ControllerAdvice para tratamento global de exceções
  3. Retornar respostas de erro consistentes e informativas

Documentação

  1. Usar Javadoc para classes e métodos públicos
  2. Manter a DOCUMENTAÇÃO do projeto atualizado
  3. Documentar a API com Swagger/OpenAPI