Шаблон объекта запроса против LINQ - PullRequest
1 голос
/ 16 августа 2011

Я занят новым проектом и работаю над своим уровнем хранилища.Это будет мой второй проект с использованием шаблона репозитория.Я читал книгу Скотта Миллета Профессиональные шаблоны проектирования ASP.NET При ссылке на учебный пример, приведенный в книге, Скотт использовал шаблон объекта запроса в своих интерфейсах репозитория.В моем предыдущем проекте я использовал LINQ для этой цели, и он работал хорошо.

Мой вопрос заключается в следующем: Каковы преимущества и недостатки использования реализации Query Object Pattern по сравнению с использованием LINQ в вашем хранилище?

Вот 2 сценария, которые иллюстрируют 2 разных подхода:

1.Подход к объекту запроса

public interface IReadOnlyRepository<T, TId> where T : IAggregateRoot
{
    T FindBy(TId id);
    IEnumerable<T> FindAll();
    IEnumerable<T> FindBy(Query query);
}

2.Подход LINQ

public interface IReadOnlyRepository<T, TId> where T : IAggregateRoot
{
    T FindBy(TId id);
    IQueryable<T> FindAll();
    IQueryable<T> FindBy(Expression<Func<T, bool>> query);
}

Любой вклад будет полезным.

1 Ответ

1 голос
/ 16 августа 2011

Хотя я думаю, что деревья выражений LINQ - это просто особая форма шаблона объекта запроса, из-за их большей гибкости они позволяют вносить в ваш код ошибки, которые видны только во время выполнения.Я говорю о коде C #, который успешно преобразуется в дерево выражений, но не понимается поставщиком, который должен преобразовать его в SQL.

Пример:

var a = new SpecialObject();
yourRepository.FindBy(x => a.IsCorrect(x));

Ошибкакак это было бы невозможно с обычным объектом запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...