En realidad tienes razón. DbContext
es una implementación del patrón de unidad de trabajo y IDbSet
es una implementación del patrón de repositorio.
Los repositorios son actualmente muy populares y utilizados en exceso. Todos los usan solo porque hay docenas de artículos sobre la creación de repositorios para el marco de la entidad, pero en realidad nadie describe los desafíos relacionados con esta decisión.
Las razones principales para usar el repositorio son generalmente:
- Ocultar EF de la capa superior
- Hacer el código mejor comprobable
La primera razón es algún tipo de pureza arquitectónica y una gran idea de que si hace que sus capas superiores sean independientes de EF, más adelante puede cambiar a otro marco de persistencia. ¿Cuántas veces viste algo así en el mundo real? Esta razón hace que trabajar con EF sea mucho más difícil porque su repositorio debe exponer muchas características adicionales que envuelven lo que EF permite por defecto.
Al mismo tiempo, envolver el código EF puede mantener su código mejor organizado y siguiendo la regla de separación de preocupaciones. Para mí, esta puede ser la única ventaja real del repositorio y la unidad de trabajo, pero debe comprender que seguir esta regla con EF hará que su código sea más fácil de mantener y de leer, pero en el esfuerzo inicial para crear su aplicación será mucho mayor y para aplicaciones más pequeñas esto puede ser una complejidad innecesaria.
La segunda razón es parcialmente correcta. La gran desventaja de EF es la arquitectura rígida que apenas se puede burlar, por lo que si desea probar la capa superior de la unidad, debe envolver EF de alguna manera para permitir burlarse de su implementación. Pero esto tiene muchas otras consecuencias que describí aquí .
Yo sigo el blog de Ayende . Si alguna vez usó NHibernate, probablemente conozca sus artículos. Este chico recientemente escribió varios artículos en contra del uso del repositorio con NHibernate, pero NHibernate es mucho mejor para burlarse.