Série: Recolocação e teste prático Java
Episódio 03: O coração da API: domínio, entidade Veículo e regras essenciais
A API ganha assunto
Com o projeto criado, chegamos à parte em que a aplicação deixa de ser só dependências e passa a falar a língua do negócio. No teste da recolocação, isso é onde muitos candidatos ou brilham ou expõem acoplamento.
O problema por trás da etapa
O sistema deve trabalhar com cadastro de veículos. Campos obrigatórios: id, descrição, marca e modelo; opcionais: opcionais e valor. Validações com Jakarta Bean Validation. A primeira escolha é tratar Veículo como centro da linguagem — não apenas linha de tabela, mas conceito que a API manipula, persiste, valida e devolve.
Em Spring Boot tradicional, a entidade pode ser anotada com JPA; o equilíbrio em teste prático é separar responsabilidades sem virar arquitetura acadêmica pesada. O essencial é que regras não fiquem no controller e o modelo seja fácil de entender.
A decisão técnica
A entidade reflete descrição, marca, modelo, opcionais e valor. Marca como enum comunica decisão de modelagem, melhora documentação e reduz erro de digitação. Validações: @NotBlank, @NotNull, @Positive, @Size onde couber — contrato na borda, regras contextuais na aplicação.
DTOs CriarVeiculoRequest, AtualizarVeiculoRequest e VeiculoResponse evitam expor a entidade crua e controlam o contrato HTTP. Contratos de repositório no domínio ou aplicação, com implementação na infra, reforçam o mapa em camadas pedido pelo PDF.
Implementando com critério
Se amanhã surgirem campos técnicos (data de criação, versão), a API não precisa expô-los automaticamente. DTOs funcionam como fronteira. A pergunta guia: se eu removesse a API HTTP, ainda entenderia o que é um veículo no sistema? Se sim, o domínio está no caminho certo.
Fechamento da etapa
Sem hierarquia de value objects desnecessária: o PDF valoriza clareza. Ao final: modelo de Veículo claro, enum de marca, requests/responses definidos e contratos de persistência visíveis. Próximo passo: ligar o domínio a JPA, H2 e Flyway.
Como defender essa etapa
Explique a diferença entre contrato HTTP (DTO), conceito persistido (entidade) e regra de aplicação. O enum de marca é exemplo simples de intenção. Aceitar JPA na entidade em teste pequeno pode ser pragmático; o que não pode é HTTP mandando no modelo.
Reflexão final: Bons nomes não são enfeite — são parte da arquitetura legível para quem avalia em poucos minutos.
Nota: Cenário anonimizado; série de insights técnicos reutilizáveis.