Java Records no DDD com Spring: Simplificando DTO e Model na prática

Com a evolução do Java, novas formas de modelar dados surgiram para tornar o código mais simples, seguro e legível.
Uma dessas inovações são os Records, introduzidos oficialmente a partir do Java 16 (preview no Java 14).
Quando utilizamos DDD com Java e Spring, os Records se encaixam perfeitamente para representar:
- DTOs
- Models (camada de domínio simples)
Neste artigo, vamos ver como utilizar Records no lugar de classes tradicionais e quais benefícios isso traz.
📦 Projeto de referência
Este artigo utiliza o projeto do artigo Domain Driven Design com Java e Spring: DTO, Model e Entity na prática:
👉 https://github.com/isacaguiar/website-projects/tree/main/ddd-java-spring-dto-model-entitiy
O que são Records no Java?
Records são uma forma concisa de declarar classes imutáveis focadas em dados.
Antes:
public class ClienteDTO {
private String nome;
private String identificador;
public ClienteDTO(String nome, String identificador) {
this.nome = nome;
this.identificador = identificador;
}
public String getNome() { return nome; }
public String getIdentificador() { return identificador; }
}
Com Record:
public record ClienteDTO(String nome, String identificador) {}
📌 Desde quando existem?
- Java 14 → preview
- Java 16 → oficial
- Java 21 → totalmente consolidado
Uso no DDD com Spring
📦 DTO com Record
DTOs são ideais para Records porque:
✔ não possuem regra de negócio
✔ são imutáveis
✔ representam transporte de dados
public record ClienteDTO(String nome, String identificador) {}
🧠 Model com Record
Você pode usar Records no domínio quando não há comportamento complexo.
public record Cliente(String nome, String cpf) {}
⚠️ Atenção:
Se o domínio tiver lógica complexa (regras, validações, invariantes),
o ideal ainda é usar classe tradicional.
🔁 MapStruct com Record
MapStruct suporta Records de forma nativa.
@Mapper(componentModel = "spring")
public interface ClienteMapper {
@Mapping(target = "cpf", source = "identificador")
Cliente toModel(ClienteDTO dto);
}
⚔️ Record vs Classe tradicional
| Critério | Record | Classe |
|---|---|---|
| Código | Menos boilerplate | Mais verboso |
| Imutabilidade | Sim | Opcional |
| Uso ideal | DTO / Model simples | Domínio complexo |
🚀 Benefícios dos Records

🚨 Quando NÃO usar Record

💻 Exemplo no projeto
👉 https://github.com/isacaguiar/website-projects/tree/main/ddd-java-spring-dto-model-entitiy
🧠 Conclusão
Java Records são uma evolução importante da linguagem e se encaixam muito bem em arquiteturas modernas com DDD e Spring Boot.
Eles permitem:
- reduzir código
- aumentar legibilidade
- garantir imutabilidade
Sem abrir mão da clareza do domínio.
Share this content:
Vamos evoluir juntos em tecnologia, carreira e disciplina.
Acompanhe novos artigos sobre backend, arquitetura, performance e os aprendizados que também surgem no esporte. Um espaço para compartilhar conhecimento, consistência e evolução ao longo da jornada.