Pular para conteúdo

Mapeamento e Validação de DTOs

Um objeto de transferência representa dados em um limite externo ou entre camadas. Ele não deve automaticamente se tornar entidade de persistência ou modelo de domínio. Separar formatos limita acoplamento, over-posting, vazamentos de carregamento lazy e mudanças de esquema impostas por consumidores alheios.

Regras em limites diferentes

Limite Responsabilidade típica
Parsing de transporte Sintaxe, campos obrigatórios, tamanho e formato
Comando da aplicação Autorização, orquestração e pré-condições do caso de uso
Modelo de domínio Invariantes de toda transição válida
Banco de dados Unicidade, referências, nulabilidade e integridade durável

Duplicar um invariante em limite amigável melhora o feedback, mas a restrição autoritativa inferior ainda deve proteger escritas concorrentes e outras entradas.

public record CreateAccountRequest(
        @NotBlank @Size(max = 120) String displayName,
        @NotNull @Email String email) {}

public record AccountResponse(UUID id, String displayName, String email) {}

Validação prova que a requisição está bem formada, não que o e-mail está disponível ou que o chamador tem permissão. Mapeie explicitamente para um comando ou operação de domínio.

Política de mapeamento

Permita campos explicitamente em vez de vincular a requisição à entidade. Defina normalização uma vez e preserve distinções: omitido versus nulo, substituir versus mesclar, valores do cliente versus do servidor. Em atualizações parciais, modele presença.

Mapeamento manual costuma ser claro em limites pequenos. Geradores reduzem repetição, mas exigem testes para campos ignorados, aninhamento, padrões, evolução de enums e posse de coleções. Evite cópia reflexiva por nomes iguais.

Erros e compatibilidade

Retorne códigos estáveis e locais de campo seguros, não stack traces ou detalhes de persistência. Alterar DTO pode alterar API pública. Campos aditivos, padrões, media types e versionamento devem seguir o contrato de compatibilidade.

Teste serialização, entrada malformada, limites, validação aninhada, campos desconhecidos, over-posting, autorização, invariantes e restrições. Não exponha segredos.