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

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

Benefícios do Records no Java Spring
Benefícios do Records no Java Spring

🚨 Quando NÃO usar Record

Quando NÃO usar Record
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:


Newsletter / CTA

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.