.net - pattern - Beneficio de usar patrones de unidad de trabajo y repositorio con Entity Framework
repositorio generico entity framework 6 (2)
Según MSDN , DbContext
se define como:
Representa una combinación de los patrones de Unidad de trabajo y Repositorio y le permite consultar una base de datos y agrupar los cambios que luego se volverán a escribir en la tienda como una unidad.
Dado que DbContext
implementa los patrones de Unidad de trabajo y repositorio, entonces, ¿por qué este tutorial de ASP.NET y otros recursos que he encontrado en Internet demuestran el uso de DbContext
con implementaciones personalizadas de los patrones de Unidad de trabajo y repositorio? ¿No es esto redundante?
Si no es así , ¿cuál es el beneficio de crear implementaciones personalizadas de las capas de Unidad de trabajo y Repositorio cuando se utiliza DbContext
? (Puedo ver cómo esto podría tener sentido dentro de un proyecto de prueba).
Sí, DbContext
representa una Unidad de trabajo y DbSet
representa un Repositorio, pero algunas personas crearán una capa de abstracción sobre ellos. Aquí hay algunas razones por las que la gente podría hacerlo:
- Tal vez no quieran que su proyecto esté estrechamente unido a Entity Framework y su arquitectura. Por lo tanto, ocultan Entity Framework detrás de esas abstracciones para que puedan sustituir Entity Framework por cualquier otro ORM sin ninguna modificación a la interfaz de la capa de acceso a datos.
- Usan repositorios para aclarar qué operaciones están permitidas para ciertas entidades. (Por ejemplo,
CustomerRepository
podría permitir agregar y actualizar clientes pero no eliminarlos). Por otro lado, permite a un desarrollador cliente reconocer fácilmente las operaciones disponibles para ciertas entidades. En otras palabras, crean repositorios con convenciones de nombres e interfaces que son compatibles con el idioma del dominio. - Mover las operaciones relacionadas con la base de datos a los repositorios le permite interceptar esas operaciones y realizar el registro, el ajuste del rendimiento o cualquier otra operación que desee.
- Algunos lo hacen para facilitar las pruebas. Digamos que tengo una interfaz
ICustomerRepository
con tres métodos. Luego puedo simular fácilmente eso en lugar deIDbSet<Customer>
unIDbSet<Customer>
con demasiados métodos. - Finalmente, hay muchos que no crean una abstracción sobre
DbContext
yDbSet
. Simplemente los usan directamente y es perfectamente válido hacerlo.
Se que es muy tarde
Para la Unidad de trabajo: cuando está extrayendo datos dentro y fuera de una base de datos, es importante hacer un seguimiento de lo que ha cambiado. Igualmente, debe insertar nuevos objetos que cree y eliminar cualquier objeto que elimine.
Puede cambiar la base de datos con cada cambio en su modelo de objeto, pero esto puede llevar a muchas llamadas de base de datos muy pequeñas.
Una Unidad de Trabajo realiza un seguimiento de todo lo que hace durante una transacción comercial que puede afectar la base de datos.
Para el patrón de repositorio: es un dominio empresarial aislado de la base de datos.
Leer el libro (PEAA)