c# - tutorial - ¿Debo transformar los objetos de entidad(persistentes) en objetos DTO?
nhibernate tutorial (1)
nhibernate es uno de esos orms que le permite evitar tener entidades DAL y será mejor para el rendimiento evitar el mapeo adicional de BLL A DAL, pero si no es crítico para usted, será mejor mantenerlo en es tener capas de aplicación sueltas acopladas
Mi proyecto está en capas de la siguiente manera: -
DAL (Entity)
->
BLL (DTO)
->
ApplicationComponent (ViewModel)
.
Habrá múltiples componentes de la aplicación (
ApplicationComponent
) que accederán a
BLL
.
Los componentes incluyen servicios de Windows, servicios web, API web y controlador MVC.
Estoy transformando objetos de la
Entity
NHibernate
objetos
DTO
mientras los paso de
DAL
a
BLL
.
Al pasar este estado a
ApplicationComponent
,
BLL
nuevamente lo convierte a
ViewModel
.
Esto me ayuda a separar las preocupaciones y cómo se manejan los datos en cada capa.
No estoy a favor de devolver el objeto de la
Entity
NHibernate
para verlo por los siguientes motivos: -
-
Los datos se exponen a la
UI
deUI
que quiero ocultar (o solo exponer si es necesario) como contraseñas, tipo de usuario, permiso, etc. -
En referencias / uniones,
NHibernate
ejecuta consultas adicionales cuando se accede a la propiedad que anula el uso de carga diferida. -
Los datos innecesarios expuestos al usuario (de la
Entity
) crean confusión y brecha para los errores. -
Las implementaciones de persistencia se filtran en
BLL
/UI
.Entity
no está diseñada para laUI
deUI
. No puede servir laUI
deUI
en todos los casos. -
Usamos atributos en las propiedades de
DTO
para la validación de entrada del usuario que parece extraña conEntity
.
Estoy enfrentando los siguientes problemas con este enfoque: -
- El problema más grande y obvio son los objetos redundantes con la misma funcionalidad.
-
Tengo que escribir métodos de mapeador en cada capa para transformar el objeto.
Esto podría minimizarse usando
AutoMapper
o algo similar; pero no resuelve completamente el problema.
Preguntas:
- ¿Es esta una separación excesiva y debe evitarse (al menos minimizarse)?
- Si este enfoque es correcto, no veo ninguna forma simple de evitar por completo dos problemas que dije anteriormente. Por favor recomiende.
- Si este enfoque es incorrecto, sugiera correcciones.
Referencias: -
-
Link1 sugiere transferir el objeto
Entity
para ver lo que, a mi entender, no es una buena idea. -
Link2 sugiere mapear
Entity
conDTO
que ya estoy de acuerdo. -
Link3 no ayuda.
-
Link4 sugiere usar algo como herramientas de mapeo automático que está bien. Pero todavía no resuelve el problema por completo.
-
Link5 es una gran publicación. Explica por qué deberían estar separados, lo que estoy de acuerdo. No comenta sobre cómo minimizar la sobrecarga causada por ella.
-
Link6 no es útil de nuevo.
Editar 1:
Acabo de leer
this
excelente respuesta que sugiere usar
Entity
como está en la
UI
de
UI
si es posible
.
Todavía no se aplica a la mayoría de mi proyecto.
Edición 2:
Otra post excelente sugiere continuar con el mapeo en dos direcciones, como lo estoy haciendo ahora. Todavía no sugiere una forma de minimizar los gastos generales.