Los patrones de diseño de software están diseñados para resolver problemas específicos con el contexto correcto, y si se utilizan de forma inapropiada, darán lugar a una complejidad extra innecesaria sin proporcionar ningún valor.
Entonces, ¿cuáles son los problemas que el patrón del repositorio intenta resolver?
1- Minimizando la lógica de consulta duplicada: en aplicaciones grandes, puede encontrar muchas consultas LINQ complejas duplicadas en algunos lugares. Si ese es el caso, puede usar el patrón de repositorio para encapsular estas consultas y minimizar la duplicación.
2- mejor separación de las preocupaciones: Imagínese una consulta compleja para obtener los cursos más vendidos en una categoría determinada que implica la carga ansiosa, unión, agrupación, filtrado, etc.
Cuando se implementa tan complejo grande consultas en sus servicios/controladores, terminará con servicios/controladores gordos. Estas clases se vuelven difíciles de probar por unidad, ya que requerirán una gran cantidad de ruido. Las pruebas de su unidad se vuelven largas, gordas e imposibles de mantener.
Si se enfrenta a este problema, quizás considere usar el patrón de repositorio. En este ejemplo, podemos encapsular la consulta compleja para obtener cursos vendidos en un repositorio:
courseRepository.GetTopSellingCourses(int categoryId, int count);
De esta manera, sus servicios/controlador ya no hacer frente a la carga con ganas, unión, agrupación, etc. En cambio, Delegará en el repositorio. Recuerde, la carga ansiosa, la unión y la agrupación, etc. consultan la lógica y pertenecen a su capa de acceso a datos, no a sus servicios o capa de presentación.
3- desacoplamiento su arquitectura de la aplicación de los marcos de persistencia: cuando utiliza clases de Entity Framework (por ejemplo DbContext, DbSet, etc.) directamente en su aplicación, su aplicación está estrechamente unida al marco de la entidad. Si planea cambiar a un O/RM diferente en el futuro, o incluso una versión más nueva de Entity Framework con un modelo diferente, es posible que tenga que modificar muchas partes de su aplicación y esto puede generar nuevos errores en su aplicación. Puede usar el patrón de repositorio para desacoplar la arquitectura de su aplicación de los marcos de persistencia como Entity Framework. De esta manera, tendrá la libertad de cambiar a un O/RM diferente con un impacto mínimo en su aplicación.
Vea este video para más detalles:
https://youtu.be/rtXpYpZdOzM
La implementación mencionada de una unidad de trabajo es una porquería. ¡En mi opinión, la unidad de trabajo no debería saber nada sobre repositorios! Tener que definir cada entidad en IDALContext es realmente malo también :(Con NHibernate no tienes que hacer esas cosas. En general, la unidad de trabajo y el patrón de repositorio es útil para grandes proyectos. Acabas de leer un blog realmente malo post. Trate de encontrar otras soluciones. – Rookian
@Rookian ¿Cómo lo aborda con NHibernate? ¿Utiliza un patrón UoW/Repository o simplemente DAOs? – Juri
@Juri Uso Uow + Repositories. Para la implementación, eche un vistazo al http://codecampserver.codeplex.com/ – Rookian