example ejemplo c# .net poco dto

example - dto c# ejemplo



Objeto CLR antiguo simple vs objeto de transferencia de datos (9)

Aquí está la regla general: DTO == mal e indicador de software sobre-diseñado. POCO == bueno. Los patrones ''empresariales'' han destruido el cerebro de muchas personas en el mundo de Java EE. por favor, no repita el error en la tierra .NET.

POCO = Plain Old CLR (o mejor: Class) Object

DTO = Objeto de transferencia de datos

En esta post hay una diferencia, pero, francamente, la mayoría de los blogs que leí describen POCO en la forma en que se define DTO: los DTO son contenedores de datos simples que se utilizan para mover datos entre las capas de una aplicación.

¿Son POCO y DTO lo mismo?


Creo que un DTO puede ser un POCO. DTO es más sobre el uso del objeto, mientras que POCO es más del estilo del objeto (desacoplado de los conceptos arquitectónicos).

Un ejemplo en el que un POCO es diferente a DTO es cuando se habla de POCO dentro de su modelo de dominio / modelo de lógica empresarial, que es una buena representación OO de su dominio problemático. Podría usar los POCO a lo largo de toda la aplicación, pero esto podría tener algún efecto secundario indeseable, como la pérdida de conocimiento. Los DTO se utilizan, por ejemplo, desde la capa de servicio con la que se comunica la interfaz de usuario, los DTO son una representación plana de los datos y solo se utilizan para proporcionar datos a la interfaz de usuario y para comunicar los cambios a la capa de servicio. La capa de servicio se encarga de asignar las dos formas del DTO a los objetos del dominio POCO.

La actualización, Martin Fowler, said que este enfoque es un camino difícil de tomar, y solo se debe tomar si hay una discrepancia significativa entre la capa de dominio y la interfaz de usuario.


Escribí un artículo para ese tema: DTO vs Value Object vs POCO .

En breve:

  • DTO! = Objeto de valor
  • DTO ⊂ POCO
  • Objeto de valor ⊂ POCO

Las clases DTO se utilizan para serializar / deserializar datos de diferentes fuentes. Cuando desee deserializar un objeto de una fuente, no importa qué fuente externa sea: servicio, archivo, base de datos, etc., es posible que solo desee utilizar parte de eso, pero desea una manera fácil de deserializar esos datos a objeto. después de eso, copia esos datos al XModel que quieres usar. Un serializador es una hermosa tecnología para cargar objetos DTO. ¿Por qué? solo necesita una función para cargar (deserializar) el objeto.


Ni siquiera les llames DTOs. Se llaman modelos .... período. Las modelos nunca tienen comportamiento. No sé a quién se le ocurrió este DTO de término tonto, pero debe ser una cosa .NET es todo lo que puedo imaginar. Piense en los modelos de vista en MVC, la misma presa **, los modelos se utilizan para transferir el estado entre las capas del servidor o durante el período de conexión, todos son modelos. Propiedades con datos. Estos son modelos que pasas sobre el cable. Modelos, Modelos Modelos. Eso es.

Desearía que el estúpido término DTO desapareciera de nuestro vocabulario.


POCO es simplemente un objeto que no depende de un marco externo. Es plano.

Si un POCO tiene comportamiento o no es irrelevante.

Un DTO tal vez POCO como un objeto de dominio (que normalmente sería rico en comportamiento)

Por lo general, es más probable que las DTO tomen dependencias de marcos externos (por ejemplo, atributos) para propósitos de serialización, ya que normalmente salen en el límite de un sistema.

En las arquitecturas típicas de estilo de Cebolla (a menudo utilizadas dentro de un enfoque amplio de DDD), la capa de dominio se ubica en el centro, por lo que sus objetos no deben tener dependencias fuera de esa capa en este punto.


Un POCO sigue las reglas de la POO. Debe (pero no tiene que) tener estado y comportamiento. POCO proviene de POJO, acuñado por Martin Fowler [ anécdota aquí ]. Utilizó el término POJO como una forma de hacerlo más sexy para rechazar las implementaciones EJB pesadas de la infraestructura. POCO debe usarse en el mismo contexto en .Net. No dejes que los marcos dicten el diseño de tu objeto.

El único propósito de un DTO es transferir el estado y no debe tener ningún comportamiento. Consulte la explicación de Martin Dowler sobre un DTO para ver un ejemplo del uso de este patrón.

Aquí está la diferencia: POCO describe un enfoque de la programación (buena programación orientada a objetos a la antigua), donde DTO es un patrón que se utiliza para "transferir datos" usando objetos.

Si bien puede tratar los POCO como DTO, corre el riesgo de crear un modelo de dominio anémico si lo hace. Además, hay una falta de coincidencia en la estructura, ya que los DTO deben estar diseñados para transferir datos, no para representar la verdadera estructura del dominio empresarial. El resultado de esto es que los DTO tienden a ser más planos que su dominio real.

En un dominio de una complejidad razonable, casi siempre es mejor crear POCO de dominio separados y traducirlos a DTO. DDD (diseño controlado por dominio) define la capa anticorrupción (otro enlace here , pero lo mejor que puede hacer es comprar el libro ), que es una buena estructura que aclara la segregación.


Un caso de uso principal para un DTO es devolver datos de un servicio web. En este caso, POCO y DTO son equivalentes. Cualquier comportamiento en el POCO se eliminaría cuando se devuelva desde un servicio web, por lo que realmente no importa si tiene o no un comportamiento.


Probablemente sea redundante para mí contribuir ya que ya mencioné mi posición en el artículo de mi blog, pero el párrafo final de ese artículo resume las cosas:

Entonces, para concluir, aprenda a amar al POCO y asegúrese de no difundir ninguna información errónea acerca de que sea lo mismo que un DTO. Los DTO son contenedores de datos simples que se utilizan para mover datos entre las capas de una aplicación. Los POCO son objetos comerciales de pleno derecho con el único requisito de que sean ignorantes de la persistencia (sin métodos de obtener o guardar). Por último, si aún no has revisado el libro de Jimmy Nilsson, recógelo en las pilas de la universidad local. Tiene ejemplos en C # y es una gran lectura.

Por cierto, Patrick. Leí el artículo de POCO como un estilo de vida y estoy completamente de acuerdo, es un artículo fantástico. En realidad, es una sección del libro de Jimmy Nilsson que recomendé. No tenía idea de que estaba disponible en línea. Su libro realmente es la mejor fuente de información que he encontrado en POCO / DTO / Repository / y otras prácticas de desarrollo de DDD.