He usado Angular 8 como frontend y Asp.Net Core WebAPI como backend.

Tengo un modelo para renderizar / vincular / validar elementos de IU en Angular. Tengo un modelo para ejecutar operaciones CRUD con base de datos usando Entity Framework Core en WebAPI.

Después de enviar un formulario de IU, necesito agregar algo de lógica de negocios en los campos capturados y luego agregarlo / actualizarlo a la base de datos.

Mi pregunta es:

¿En qué formato de modelo debo pasar los datos a WebAPI? ¿Tengo que crear el mismo modelo de vista en WebAPI y enviar los datos tal como se capturan en la interfaz de usuario y agregar lógica de negocios en WebAPI?

Si creo el modelo de vista en WebAPI, habrá 2 modelos idénticos, uno en el proyecto Angular, otro en WebAPI y resultará en tener 3 modelos para una sola entidad (2 modelos de vista y 1 modelo de base de datos).

¿Cuál podría ser el mejor enfoque en este caso?

1
Reyan Chougle 5 ene. 2020 a las 15:00

2 respuestas

La mejor respuesta

No es que tenga 3 modelos para una sola entidad. Los modelos de vista tanto en angular como en webApi son los mismos y, por lo tanto, deben tratarse como un solo modelo. Es un enfoque común y muy lógico utilizar esos modelos de vista para pasar datos al servidor.

2
Dragolis 5 ene. 2020 a las 12:24

Tener dos modelos de Vista en ambos lados está completamente bien. A veces podríamos entrar en una situación en la que necesitamos tener propiedades adicionales en los modelos de visualización que Entity o propiedades menores en los modelos de visualización que Entity. A veces no necesitamos mostrar todas las propiedades de una Entidad en nuestra página web, por lo tanto, debemos usar modelos de vista separados para superar esta situación. Normalmente estas clases se llaman clases de recursos .

Una clase de recurso es una clase que contiene solo información básica que se intercambiará entre las aplicaciones cliente y los puntos finales API, generalmente en forma de datos JSON, para representar cierta información en particular.

Todas las respuestas de los puntos finales de API deben devolver un recurso.

Es una mala práctica devolver la representación del modelo real como respuesta, ya que puede contener información que la aplicación cliente no necesita o que no tiene permiso (por ejemplo, un modelo de usuario podría devolver información de la contraseña del usuario). , lo que sería un gran problema de seguridad).

Entonces podemos usar bibliotecas como AutoMapper para manejar el mapeo entre objetos (entre clases de recursos y entidades)

var categories = await _categoryService.ListAsync();
var resources = _mapper.Map<IEnumerable<Category>, IEnumerable<CategoryResource>>(categories);

return resources;
0
Binara Thambugala 5 ene. 2020 a las 17:25