standard net lazy framework example asp.net-mvc entity-framework viewmodel automapper dto

asp.net-mvc - net - example automapper



Domain vs DTO vs ViewModel-¿Cómo y cuándo usarlos? (4)

Está bien pasar el DTO a la vista. Si necesita cambiar o mejorar el DTO, cree un ViewModel. Un escenario común sería agregar enlaces. También está bien que ViewModel haga referencia al DTO como una propiedad compleja.

En un proyecto de capas múltiples con capa de dominio (DL) / capa de negocios (servicio) (BL) / capa de presentación (PL), ¿cuál es el mejor enfoque para entregar entidades a la capa de presentación?

DO => Domain Object; DTO = Domain Transfer Object; VM => View Model; V => View;

Opción 1:

DL => DO => BL => DTO => PL => VM => V

Esta opción parece ser la mejor práctica, pero también parece ser una tarea difícil de mantener.

Opcion 2:

DL => DO => BL => DTO => PL => V

Esta opción no parece ser una buena práctica, pero como DTO es casi idéntica a la VM, podemos pasarla directamente a la Vista y es menos doloroso de implementar y mantener.

¿Es esta opción también confiable para diseños múltiples, por ejemplo, para dispositivos móviles? Es posible que necesite menos información del BL, por lo que necesitaré una VM diferente para este diseño en particular?


Para mí esta decisión se basa en donde coloco mi lógica de validación.

Escenario # 1: Agregar una anotación de datos en el modelo de vista (en la capa UI) simplifica enormemente la programación. Principalmente habrá una asignación uno a uno entre DTO y el modelo de vista. En tales casos, la Opción 1 es buena. DL => DO => BL => DTO => PL => VM => V

Escenario # 2) Si la validación no se adjunta a ViewModels, DTO se reemplaza con ViewModel y ViewModel reside en la capa empresarial. DL => DO => BL => VM => PL => V

El escenario # 2 puede ser perfecto en situaciones donde la lógica de validación reside en modelos de dominio. Y estos modelos son utilizados por muchas aplicaciones de interfaz de usuario. La interfaz de usuario solo enumera los errores en una lista, como lo indica la capa empresarial (aunque no es muy fácil de usar). A medida que la aplicación experimenta cambios en las reglas comerciales, solo cambiamos el modelo de dominio. Una vez más, las validaciones relacionadas con la base de datos se pueden generar automáticamente a través de EF (si se usa .net), incluso menos posibilidades de cambio.


Si va a tener diferentes vistas que requieren datos diferentes de su Dto, parece que podría beneficiarse de tener diferentes modelos de vistas para estos y asignar su Dto a estos.

Una de las ideas detrás de esto es permitir una mayor libertad para cambiar su modelo de vista, sabiendo que no tendrá impacto en ninguna otra parte de su aplicación. Si su Dto se está utilizando en varias vistas, entonces cada cambio en su Dto requerirá que pruebe cada vista.


Vea aquí mi respuesta: https://.com/a/14059156/1288063

Usted dice: esta opción parece ser la mejor práctica, pero también parece ser una tarea difícil de mantener.

Quizás sea difícil de implementar, juste algunas líneas de código para duplicar la mayor parte del tiempo, pero seguramente no.