DEV Community

Rômulo Mendes Soares Junior
Rômulo Mendes Soares Junior

Posted on

DTO, Value Object e Enum: a diferença que todo dev precisa saber 🚀


![ ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/19v3ldqsapwmfa2u4vck.png)
Enter fullscreen mode Exit fullscreen mode

🎯 DTO, Value Object e Enum: a diferença que todo dev precisa saber

Quando você fala de DTO, Value Object e Enum juntos, você está falando de padrões de modelagem de dados ou, de forma mais acadêmica, de Data Modeling Patterns dentro da programação orientada a objetos e arquitetura de software.

📌 Em outras palavras:

  • DTO (Data Transfer Object) → caixa de correio 📦 (leva dados de um lugar a outro), padrão de transporte de dados.
  • Value Object → RG ou CPF 📑 (imutável, segue regras e validação própria), padrão de modelagem de valor (imutável, com regras próprias).
  • Enum → semáforo 🚦 (verde, amarelo, vermelho — valores fechados e conhecidos), tipo enumerado, um padrão para representar conjuntos fixos de estados ou valores.

Se quiser ir mais a fundar "la ele" sobre com exemplos praticos:


1️⃣ DTO - Data Transfer Object 📦
O que é:
Um DTO é um objeto simples, criado para transportar dados entre camadas da aplicação, por exemplo: Controller → Service → Repository.

Características:

  • Apenas transporta dados, sem lógica de negócio pesada.
  • Geralmente usado para sanitizar e validar entradas externas.
  • Pode ser mutável ou imutável, dependendo do design.

💡 Analogia: Pense no DTO como uma caixa de correio - ele leva informações de um lugar a outro.


2️⃣ Value Object - Representação de valor com regras 📑
O que é:
Um Value Object (VO) representa um conceito do domínio de forma imutável. Ele encapsula regras e comportamentos relacionados ao valor que carrega.

Características:

  • Imutável.
  • Igualdade por valor, não por identidade.
  • Pode validar ou manipular o próprio valor.

💡 Analogia: Pense no VO como seu RG ou CPF - ele é único, válido e não muda.


3️⃣ Enum - Valores fixos e conhecidos 🚦
O que é:
Um Enum é uma lista de valores pré-definidos, ideal para representar estados ou opções limitadas.

💡 Analogia: Pense no Enum como um semáforo - ele só pode estar em verde, amarelo ou vermelho.


📝 Resumo rápido:

  • DTO: transportar dados entre camadas 📦
  • Value Object: representar valores com regras e imutabilidade 📑
  • Enum: representar um conjunto fixo de estados ou opções 🚦

💡 Dica prática:
Em projetos bem estruturados (Laravel, DDD, Clean Architecture), você vai usar:

  • DTO para entrada/saída,
  • Value Objects para representar conceitos do domínio,
  • Enum para limitar estados ou opções.

Assim, seu código fica mais claro, seguro e fácil de manter.

Top comments (0)