Pregunta

¿Cómo pasar datos a las capas de una aplicación de n niveles? He trazado 3 métodos diferentes.

A) .net genérica tablas de datos genéricos, tablas hash, conjuntos de datos genéricos, cuerdas, etc ... Ints a continuación, utilizando los conjuntos de datos para llenar sus objetos de negocio, que son enviadas a la capa de interfaz de usuario.

alt http://img11.imageshack.us/img11/460/generic texto. png

http://dabbleboard.com/draw?b=eiu165&i=26&c=54eef6f1ac01f03c85919518f4a24e798e57e133

Pro - No hay capas adicionales necesarios Con - tiene que trabajar con conjuntos de datos genéricos y mesas en la capa de negocio

B) usando una capa de entidades que las otras capas haría referencia. Esta capa podría contener cualquiera de los conjuntos de datos con establecimiento inflexible o Plain Old C objetos. Los objetos serían en su mayoría datos de contenedor y muy poco de lógica. estos serían los mismos objetos enviados a la capa de interfaz de usuario.

alt text http://img8.imageshack.us/img8/6454/entities. png

http://dabbleboard.com/draw?b=eiu165&i=6&c=d0c2b346894a96b12bd3867f630e474a2af098fa

Pro - trabajar con las mismas clases en todas las capas Con - añadir una referencia a entities.dll a todas las capas

C) utilizar objetos de transferencia de datos (sólo los objetos conatiner) definidas en la capa DataAccess. a continuación, utilizando esos objetos para llenar los objetos de negocio, que son enviadas a la capa de interfaz de usuario.

alt http://img43.imageshack.us/img43/1236/transferp texto. png

http://dabbleboard.com/draw?b=eiu165&i=27&c=f886efa3f9d5eb4b45ddb02361c79cdcdaec0a9b

Pro - la capa de negocio no tendría que trabajar con clases genéricas Con - trabajar con dos tipos de objetos y que tendría para hidratar los objetos de negocio con los objetos de transferencia

Hemos tenido una discusión en el trabajo y queríamos ver lo que pensaba la comunidad. También he añadido un enlace a la Dabbleboard. Por favor, copie y crear en lugar de edición.
Gracias

¿Fue útil?

Solución

Si estás usando un capas enfoque, es decir, todas las capas se (esencialmente) que se ejecutan en el mismo espacio de proceso y por lo tanto no hay ningún cálculo de referencias / serialización, me gustaría ir con enfoque B. Crear un módulo separado para sus entidades sobre las cuales todos los aspectos de su programa dependen, y la pareja de ello.

Sin embargo, si usted está usando un niveles enfoque como su título indica, lo que significa que son los límites del proceso y / o de red que se cruzan, me gustaría sugerir que vaya con enfoque C. no son realmente pasando casos alrededor, estás pasando copias, por lo que los beneficios que obtiene al acoplamiento con el mismo objeto, como opciones observables para, por ejemplo, un enfoque MVC, se pierden todos modos. Mejor para definir las API de datos en todos los niveles de nivel de tratar de usar la misma clase por todas partes.

Otros consejos

Gran pregunta -. Como siempre, la respuesta tiene que ser "depende"

En el tipo de aplicación, y si realmente existe una necesidad de tener objetos de negocio (entidades), en lugar de transferir objetos (es decir, objetos de negocio idiotizada que corresponden más a las entidades de base de datos).

Tradicionalmente, habría argumentado que siempre tiene una necesidad de conjuntos de datos genéricos (o tablas de datos), exclusivamente por razones de rendimiento. Siempre que hay una necesidad de trabajar con, pantalla, o manipular los conjuntos de mayor tamaño, la forma tradicional OO estricta de crear instancias de un gran número de objetos de negocio fracasó.

Sin embargo, desde que empecé a trabajar con LINQ to SQL, mis paradigmas han cambiado. Ya no hay necesidad de esto en absoluto, ya que el modelo LINQ puede ser todo - los objetos de negocio, objetos de transferencia, y los conjuntos de datos genéricos. No he explorado todavía lo bien que funciona en aplicaciones muy grandes, y si debe haber una necesidad de aislar el código de extremo frontal del modelo LINQ. He tenido discusiones acerca de ello con sus colegas, sin realmente encontrar una respuesta en ambos sentidos.

Me gusta la opción C, pero también me da una pausa por dos razones:

  1. Tengo que correr la knwowledge de lo que los properites están en demasiados lugares.
  2. DTO tienen que ser serializable, que no es terrible, pero sigue siendo una consideración.

Estoy asumiendo las 3 capas existe dentro de la misma aplicación. En java al menos he usado Hibernate para el acceso de datos y utiliza los beans de datos en todas las capas. (Opción B) Tiene sentido para poder reutilizar las entidades en sus capas.

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