Tengo serias dudas sobre el diseño de mi aplicación web.
Quería separar la lógica de negocios de la interfaz, así que hice una API web que maneja todas las solicitudes a la base de datos.
Es una API web ASP.NET con Entity Framework y una unidad de trabajo y un patrón de repositorio genérico. Hasta ahora, todo está bien.
PROBLEMA
Donde necesito ayuda es que no puedo encontrar una manera eficiente de compartir objetos entre la API y la aplicación.
No quiero serializar directamente el objeto de entidad, pensé que sería una mala práctica porque si el modelo de entidad cambia, podría terminar serializando objetos grandes sin ningún motivo.
Cómo se implementa ahora
Debido a que mi interfaz es la aplicación web ASP.NET en C # y mi API está en C #, hice una biblioteca común con la definición de todas mis clases que quiero compartir entre ellas.
Sé que la solución no funcionará cuando desarrolle una aplicación de Android, tendré que crear mis clases nuevamente en Java, pero ese no es mi mayor problema.
El problema es que siento que siempre estoy convirtiendo mis objetos.
EJEMPLO
Aquí hay un ejemplo de mi flujo de trabajo:
Comienzo con un modelo con todos los objetos y las anotaciones de datos para mi formulario, luego el usuario PUBLICARÁ ese modelo en un controlador.
En el controlador, tengo que convertir este modelo a una clase en mi biblioteca común y luego enviar ese objeto a mi API.
Luego, un controlador en mi API captura la llamada y convierte ese objeto en un objeto de entidad para actualizar la base de datos.
Entonces tengo 3 clases
- El modelo para la vista con todas las anotaciones de datos para la validación (Cliente)
- Las clases de biblioteca comunes para compartir los objetos (DLL)
- Las clases de entidad (API)
Tengo la sensación de que hago algo realmente mal. ¿Hay algo más elegante? Me gustaría asegurarme de tener una buena solución para este problema antes de que el proyecto sea demasiado grande.