unidad trabajo repositorio pattern patrón patrones patron net generico framework diseño .net asp.net-mvc entity-framework repository unit-of-work

.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 de IDbSet<Customer> un IDbSet<Customer> con demasiados métodos.
  • Finalmente, hay muchos que no crean una abstracción sobre DbContext y DbSet . 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)