visual tutorial studio c# nhibernate orm mapping data-access-layer

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 de UI 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 la UI de UI . No puede servir la UI de UI en todos los casos.
  • Usamos atributos en las propiedades de DTO para la validación de entrada del usuario que parece extraña con Entity .

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: -

  1. Link1 sugiere transferir el objeto Entity para ver lo que, a mi entender, no es una buena idea.

  2. Link2 sugiere mapear Entity con DTO que ya estoy de acuerdo.

  3. Link3 no ayuda.

  4. Link4 sugiere usar algo como herramientas de mapeo automático que está bien. Pero todavía no resuelve el problema por completo.

  5. 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.

  6. 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.