Solo tuve que cambiar un ORM y fue una tarea relativamente desalentadora, porque la lógica de consulta se estaba filtrando por todas partes. Si alguna vez hubiera tenido que desarrollar una nueva aplicación, mi preferencia personal sería encapsular toda la lógica de consulta (usando un ORM) para prevenir el cambio en el futuro. El patrón de repositorio es bastante problemático para codificar y mantener, así que me preguntaba si hay algún otro patrón para resolver el problema.
Puedo prever publicaciones sobre no agregar complejidad adicional antes de que sea realmente necesario, ser ágil, etc., pero solo estoy interesado en los patrones existentes para resolver un problema similar de una manera más simple.
Mi primer pensamiento fue tener un repositorio de tipos genéricos, al que agrego métodos según sea necesario para clases específicas de repositorios de tipos a través de métodos de extensión, pero las pruebas unitarias de métodos estáticos son terriblemente dolorosas. ES DECIR:
public static class PersonExtensions
{
public static IEnumerable<Person> GetRetiredPeople(this IRepository<Person> personRep)
{
// logic
}
}