C# - DTO x Value Object x POCO
Com certeza
você já ouvir falar em DTO,
Value Object e POCO.
O que significam cada um destes termos e quais as diferenças conceituais entre eles ? |
Vamos começar com a definição de DTO, Value Object e POCO.
Teriam essas siglas os mesmos conceitos podendo ser usadas de forma intercambiável ?
Vejamos...
DTO - Data Transfer Object
DTO é um padrão de projeto usado para transportar dados entre diferentes componentes de um sistema, diferentes instâncias ou processos de um sistema distribuído ou diferentes sistemas via serialização.
Assim, DTO é
uma classe que representa dados sem lógica que normalmente é usada para
transferir dados entre diferentes aplicativos ou diferentes camadas em um único
aplicativo.
Value Objects (VO)
Value Objects, segundo a abordagem
Domain Drive Design,
são objetos sem
identidade conceitual e que dão característica a algum outro objeto.
Um
Value
Object é um membro completo do seu modelo de domínio estando em conformidade com
as mesmas regras da entidade(Entity).
A única diferença entre Value Object e a Entity
(Entidade) é que um Value Object não possui sua própria identidade. Isso
significa que dois Value Objects com o mesmo conjunto de propriedades devem ser
considerados os mesmos, ao passo que duas Entities
diferem mesmo se suas propriedades forem correspondentes.
Os Value Objects contêm lógica e, normalmente, não são usados para
transferir dados entre limites de aplicativo.
POCO - Plain Old CLR Objects
POCO significa Plain Old CLR Objects, e, é uma classe que não depende de nenhuma classe base específica de framework. (Foi criado como uma analogia a POJO - Plain Old Java Objects)Como relacionar DTO, VO e POCO ?
Existe alguma conexão entre esses termos ?
Sim, existem algumas...
Em primeiro lugar, DTO e Value Object representam conceitos diferentes e não podem ser usados de maneira intercambiável.
Por outro lado, POCO é um superconjunto para DTO e Value Object.
Assim, um Value Object e um DTO não devem herdar nenhum componente corporativo pesado e portanto são POCOs.
Ao mesmo tempo, POCO é um conjunto mais amplo: podendo ser um Value Object, uma Entity, um DTO ou qualquer outra classe que você possa criar, desde que não herde a complexidade do seu domínio.
A tabela a seguir relaciona dados, lógica e identidade entre esses conceitos:
DTO | Value Object | POCO | |
Contém dados | Sim | Sim | Sim |
Contém Lógica | Não | Sim | Sim/Não |
Tem Identidade | Não | Não | Sim/Não |
Percebemos que um objeto POCO pode ter ou não sua própria identidade.Isso vai depender de qual tipo de POCO ele é : Value Object ou Entity.
Além disso, um POCO pode ou não conter lógica nele. Depende se ele for ou não é um DTO.
Concluindo:
- DTO é diferente de Value Object
- DTO esta contido no POCO
- Value Object esta contido no POCO
E estamos conversados...
Louvai ao Deus dos deuses; porque a sua benignidade dura para sempre.
Louvai ao Senhor dos senhores; porque a sua benignidade dura para sempre."
Salmos 136:1-3
Referências: