practices - web api c# entity framework
¿Debería la capa de repositorio devolver objetos de transferencia de datos(DTO)? (1)
Respuesta corta: No.
Respuesta larga: el repositorio es responsable de devolver los datos persistentes a las entidades (modelos) y viceversa.
El modelo es un modelo de negocio que representa una entidad comercial. Por otro lado, DTO, aunque parece un modelo, se refiere a la transferencia del objeto entre varios entornos y, en esencia, es un objeto transitorio. Por lo general, los mapeadores son responsables de convertir el modelo en DTO.
Tengo una capa de repositorio que es responsable de mi acceso a datos, que es llamada por una capa de servicio. La capa de servicio devuelve DTO que se serializan y se envían por cable. La mayoría de las veces, los servicios hacen poco más que acceder a un repositorio y devolver lo que devuelve el repositorio.
Pero para que eso funcione, el repositorio debe devolver una instancia de ese DTO. De lo contrario, primero tendría que asignar el objeto de capa de datos que el repositorio devuelve a un DTO en la capa de servicio y devolverlo. Eso simplemente parece un desperdicio.
Además de eso, si la creación de los DTO ocurre en la capa de servicio, algo que podría haberse hecho antes en una llamada al repositorio y, por lo tanto, en una consulta de la base de datos, ahora tiene que ocurrir con varias llamadas al repositorio en la capa del servicio para "componer" la DTO final. Por supuesto, a menos que cree un objeto de transporte entre los datos y la capa de servicio que puede contener dicho objeto compuesto. Que luego tiene que ser asignado a un DTO. Simplemente parece un desperdicio en aras de la pureza. Pero también se siente mal que la capa de repositorio devuelva los objetos que solo existen para que se envíen por cable.