Estoy tratando de escribir una aplicación pequeña con límites muy estrictos entre BLL y DAL y ahora me pregunto cuál sería la mejor manera de pasar los datos (objetos de transferencia de dominio) entre las capas.Cómo usar los DTO entre UI, BLL, DAL
Implementé algunas clases en un nivel de dominio (biblioteca de clases) a las que acceden tanto BLL como DAL. Estas clases básicamente solo contienen propiedades/miembros de datos y actualmente reflejan los datos DAL. Ej:
class CustomerData
{
// some data fields
}
Entonces implementado algunas clases en BLL como:
class Customer : CustomerData
{
// Some methods
}
En mi DAL consigo los registros de clientes de la base de datos mediante LINQ to SQL. Luego asigno el objeto LINQ a mi objeto Dominio por:
CustomerData.field = LinqObject.field
// Etc
Mi pensamiento es, pues, que ahora es un ejemplo CustomerData de mi DAL a BLL cuando se le solicite (y que debería pasar una instancia del cliente a la interfaz de usuario).
En mi BLL, recibiré una instancia de CustomerData, pero ahora quiero convertirlo en un Cliente.
Preguntas:
- ¿Tengo que en mi BLL ahora crear una instancia de cliente y otra vez copiar todos los miembros de campo?
Cliente c = nuevo Cliente; c.field = CustomerData.field; - ¿Cómo puedo crear un cliente de CustomerData sin los pasos de copia del campo?
- ¿Debería usar composición?
clase Cliente { CustomerData Data; } - ¿Existe alguna forma más efectiva (menos codificación, etc.) para hacer esto en mi diseño actual?
- ¿Hay mejores formas de hacerlo?
- ¿Algún comentario en general?
¡Gracias!
Yorah's answer +8 for # 1. La codificación de mono así podría parecerle un dolor. Al final, en realidad es lo incorrecto debido al grado en que aumenta los errores y hace que las cosas sean tan dolorosas en el a $$. Pruebe ValuInjector también: a muchos les gusta más que AutoMapper, mucho más liviano. Asegúrate de volver a utilizar tus asignaciones. – FastAl