я читал о хранилище шаблона последние несколько дней, и все говорят об этом не разоблачить IQueryable из репозитория, как этот (как here и here):Не подвергая IQueryable и не нарушая принцип OC
public interface ICustomersRepository
{
IQueryable<Customer> Customers{ get; }
}
И для этого требуется большое количество разработчиков.
Но когда речь идет о фильтрации большого количества данных и пользовательских фильтров из пользовательского интерфейса (например, отчета с более чем 10 параметрами фильтра для поиска в данных более 1 миллиона записей), IQueryable?
Особенно, если существует инфраструктура и другие низкоуровневые разработчики используют репозиторий для разработки пользовательских отчетов. Они не всегда могут использовать GetAll для этой цели.
Как упоминалось в других тонах, таких как this или this, у меня должны быть методы для каждого из отчетов, которые у меня есть в моих репозиториях, и они должны возвращать IEnumerable. Вот что мне непонятно:
Если у меня есть новый отчет, я должен изменить свой репозиторий для этого и добавить новый метод. И если я изменю свой репозиторий, я нарушил Open/Close principle.
Вот моя проблема: я не хочу раскрывать Iqueryable, а с другой стороны, я не хочу менять свой репозиторий для каждого отчета.
Не возвращают IQueryable, но * принять один *, который можно использовать в качестве фильтра. Например, 'public SomeType [] Get (IQueryable filter)', который прост в использовании. Var result = someTypeRepo.Get (x => x.Id> 0) '. –
Will
Благодарю вас, что на самом деле может легко работать –
Вы также можете взять IQueryables, которые отображают свойства навигации, которые вы хотите включить в результат. – Will