Я часто вижу примеры шаблонов репозитория, которые выглядят следующим образом:
public interface IRepository<T>
{
T GetById(int id);
IEnumerable<T> GetAllByName(string name);
}
Но как вы справляетесь со случаями, когда вам может потребоваться выполнить сложный поиск? Я не думаю, что было бы хорошей идеей добавить к интерфейсу много методов, чтобы он в конечном итоге выглядел так:
IEnumerable<T> GetAllByFirstName(string name);
IEnumerable<T> GetAllByLastName(string name);
IEnumerable<T> GetAllByFirstAndLastName(string name);
IEnumerable<T> GetAllByAddress(string name);
...
...
...