Pregunta

¿Cuál es la mejor manera de poner en práctica dtos?

Mi entendimiento es que son una forma de transferir datos entre los objetos. Por ejemplo, en una aplicación ASP.Net, es posible utilizar un DTO para enviar datos desde el código subyacente a la componente de la capa de lógica de negocio.

¿Qué pasa con otras opciones, como acaba de enviar los datos como parámetros de método? (¿Esto sería más fácil en ASCE RCEst hay menos datos a enviar?)

¿Qué hay de una clase estática que solo contiene datos, que puede ser referenciado por otros objetos (un tipo de clase de almacenamiento de datos asembly mundial)? (¿Esta encapsulación ruptura demasiado?)

¿Qué hay de un solo DTO genérico utilizado para cada transferencia? Puede que sea un poco más problema de usar, sino que reduce el número de clases necesarias para trabajar con (reduce el desorden de objetos).

Gracias por compartir sus pensamientos.

¿Fue útil?

Solución 6

Gracias por todas las ideas útiles ...

Un resumen + mi opinión sobre esto:

- Si hay una pequeña cantidad de datos para moverse y no hay muchos lugares para moverlo, puede ser suficiente parámetros regulares

-. Si hay una gran cantidad de datos y / o muchos objetos para moverlo a, un objeto especialmente creado puede ser más fácil (objeto DTO)

- Un objeto de datos global que se puede hacer referencia (en lugar de pasar) por diversos objetos parecería estar mal visto ... Sin embargo, me pregunto si no es a veces un lugar para él dentro de un sub-sistema particular ? Es una manera de reducir la cantidad de datos transmitidos. No empujar los límites de la "buena encapsulación", sin embargo, en casos específicos dentro de las capas específicas, tal vez podría añadir a una simplicidad assemply particluar de clases. De este modo se podría perder la encapsulación de nivel de clase, pero todavía podría tener la encapsulación de nivel de ensamblado.

Otros consejos

He usado de DTO a:

  • Los datos pasan entre la interfaz de usuario y el servicio de nivel de de una aplicación estándar de 3 niveles.
  • Datos de pasar como parámetros de método para encapsular un gran número (5+) de parámetros.

El 'uno DTO les descarta todos' podría causar problemas, lo mejor es ir con DTO específica de cada grupo de función / función, teniendo cuidado de nombrarlos por lo que son fáciles de combinar entre las características que están utilizado en.

Nunca he visto estática DTO en la forma en que usted menciona y vacilarías a la creación de conjuntos unitarios DTO como usted describe.

Debe ser sencillo y mapa de una clase DTO a una tabla db. Son ligeros para que pueda enviarlos por todas partes, incluyendo a través del cable.

Me gustaría que podría ser tan simple. Aunque DTO se originó debido a la red de distribución de niveles de un sistema no puede haber carga entera de problemas si se devuelven los objetos de dominio para ver las capas. Éstos son algunos de ellos:

1.By la exposición de objetos de dominio de vista de capas, Vistas a tomar conciencia de la estructura de los objetos de dominio, lo que le permite vista hace algunas suposiciones acerca de cómo los objetos relacionados están disponibles. Por ejemplo, si un objeto de dominio "Persona" se retunrned a una vista a la que es "unido" y en algún otro punto de vista, "Dirección" de la persona que se va a enlazar, no habría una tendencia a que la capa de aplicación para utilizar un semántico como person.getAddresse () que woukd fallar ya que en ese objeto de dominio punto Dirección podría no haber sido cargado en el punto. En esencia, con objetos de dominio que estén disponibles para ver las capas, vistas siempre pueden hacer suposiciones acerca de cómo los datos se pone a disposición.

2.) Cuando los objetos de dominio están obligados a puntos de vista (más aún en clientes pesados), habrá alwyas haber una tendencia a la lógica centrada Ver a la fluencia dentro de estos objetos haciéndolos lógicamente corruptos.

Básicamente partir de mi experiencia he visto que la toma de objetos de dominio disponible para Vistas crear problemas de arquitectura pero hay problemas con el uso de la DTO también ya que el uso de DTO crea trabajo adicional en términos de creación de ensambladores (DTO a los objetos de dominio y marcha atrás) , la proliferación de objetos análogos como objeto de dominio paciente, DTO paciente y haba quizás paciente obligado a ver.

Es evidente que no hay respuestas correctas para esta especialmente en un sistema de cliente pesado.

me prestó esta respuesta corta y no completa, pero fiel a DTO cliché de:
http://www.theserverside.com/discussions/thread.tss? thread_id = 32389 # 160505

Creo que es bastante común el uso conjunto de datos / DataTable como "un DTO para gobernarlos a todos". Es fácil cargarlos desde la base de datos, y persisten los valores de nuevo, y que se puede serializar fácilmente.

Sin duda diría que son más problemas para su uso. Te dan todas las cañerías, pero la programación en contra de ellos es un dolor (un montón de fundición, cheques nulos, cuerdas mágicas, etc.). Sería interesante ver un buen conjunto de métodos de extensión para que pueda trabajar con ellos un poco más "natural".

DTO se utilizan para enviar datos sobre el alambre, no entre objetos. Echa un vistazo a este post: POCO vs DTO

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top