Publiqué una pregunta en github para el equipo EF. Recibí una respuesta que decía que sería mejor hacer esta pregunta aquí, así que la copiaré y pegaré aquí como un enlace para que otros puedan ver las pocas respuestas en GitHub.
Pregunta: Estaba investigando y alguien señaló que la línea 24 de la clase DBContext dice
DbContext es una combinación de los patrones de Unidad de trabajo y Repositorio.
¿Significa esto que ya no necesitamos abstraer EF a un repositorio y luego usar una interfaz para inyectarlo en los controladores?
Publicación original en Github: https://github.com/aspnet/EntityFramework/issues/4899
La razón por la que pregunto esto es que parece que me encuentro en un lugar donde estoy agregando muchos métodos al repositorio como GetById, GetByName, GetWithIncludesABC, GetWithIncludes123, etc. y parece estar ensuciando el repositorio en mi mente
fuente
Respuestas:
Si está agregando métodos a un repositorio como
Entonces es mejor pasar a una capa de servicio y dejar que la capa de servicio use EF directamente. EF ya tiene una funcionalidad similar a los métodos anteriores que simplemente está duplicando sin cesar.
Una capa de servicio expone los métodos del dominio comercial y utiliza CRUD para implementarlos. Por ejemplo, puede tener un método llamado
TransferMoney(A, B)
, donde A y B son cuentas corrientes. Esto le permite hablar el idioma de su dominio comercial, mientras que la capa de servicio maneja el CRUD por usted.La única razón convincente por la que puedo pensar en dónde podría desear tener una capa de repositorio separada es para que pueda burlarse de esa capa de repositorio o sustituir una fuente de datos diferente para fines de prueba.
fuente
Robert Harvey dijo en su respuesta:
Esto es precisamente por qué el patrón de repositorio sigue siendo relevante. Tampoco estoy de acuerdo con la afirmación de los equipos de Entity Framework de que implementan el Patrón de repositorio. Entity Framework todavía está muy vinculado a una base de datos. Todo el propósito del Patrón de repositorio es desacoplar y abstraer el mecanismo exacto de persistencia utilizado en su aplicación, de modo que nada de la implementación del acceso a datos se filtre fuera de la capa de repositorio.
Si está utilizando la API de consulta EF fuera del "repositorio", como en un objeto de servicio de algún tipo, diría que está rompiendo el patrón.
Ahora, si no es un problema catastrófico para la base de datos, como la funcionalidad, filtrarse en su otro código, y puede garantizar que no necesitará mover algunas de sus operaciones CRUD a un servicio web en el futuro, entonces usar EF directamente sería OKAY.
Básicamente, Entity Framework toma el lugar del objeto Gateway en el Patrón de repositorio. No lo veo como un repositorio en sí.
fuente
TransferFunds()
yBuildWidget()
. Un repositorio solo contiene métodos CRUD.Los repositorios parecen no ser necesarios: Microsoft en sus aplicaciones de microservicios de backend de muestra no los usa:
https://github.com/Microsoft/BikeSharing360_BackendServices
La aplicación BikeSharing de muestra se mostró en Connect (); evento (creo que se puede usar como plantilla para proyectos API):
https://blogs.msdn.microsoft.com/visualstudio/2016/12/14/connectdemos-2016-bikesharing360-on-github/
fuente