Использовать шаблон хранилища при использовании сгенерированных данных PLINQO?

Я "обновляю" приложение MVC. Ранее DAL был частью Модели как серия репозиториев (основанных на имени объекта), использующих стандартные запросы LINQ to SQL. Теперь это отдельный проект, созданный с использованием PLINQO.

Так как PLINQO генерирует расширения запросов на основе свойств сущности, я начал использовать их непосредственно в своем контроллере... и полностью исключил репозитории.

Работает нормально, это больше вопрос, на который стоит обратить ваше внимание. Должен ли я продолжать идти по этому пути или перестроить репозитории (используя PLINQO в качестве DAL в файлах репозитория)?

Одно из преимуществ использования контекста данных, сгенерированного PLINQO, заключается в том, что когда мне нужен доступ к БД, я просто делаю одну ссылку на контекст данных. В соответствии с шаблоном репозитория я должен был ссылаться на каждый репозиторий, когда мне требовался доступ к данным, иногда требовалось ссылаться на несколько репозиториев на одном контроллере.

Большим преимуществом, которое я увидел в репозиториях, были метко названные методы запросов (например, FindAllProductsByCategoryId(int id) и т. Д.). С кодом PLINQO это _db.Product.ByCatId(int id) - что тоже неплохо.

Мне нравятся оба, но где это становится "более сильным", когда запрос использует предикаты. Я могу свернуть это в метод запроса хранилища. Но в коде PLINQO это будет что-то вроде _db.Product.Where(x => x.CatId == 1 && x.OrderId == 1); Я не уверен, что мне нравится иметь такой код в моих контроллерах.

Что вы думаете об этом?

1 ответ

Решение

- КВАДРАТНЫЕ РАСШИРЕНИЯ -

Расширения запросов PLINQO разработаны для создания цепочек. Предполагается, что это поможет избежать слишком "гарри".;)

// Лямбда
_db.Product.Where (x => x.CatId == 1 && x.OrderId == 1);
// Расширения запроса
_db.Product.ByCatId (1).ByOrderId (1);

// Еще сложнее лямбда
_db.Product.Where (x => (x.CatId == 1 || x.CatId == 3) && x.OrderId! = 1);
// Расширения запроса
_db.Product.ByCatId(1, 3).ByOrderId(ComparisonOperator.NotEqual, 1);

Кроме того, для действительно сложных запросов мы предлагаем добавить пользовательские методы расширения в редактируемые (пассивно сгенерированные) файлы расширений запросов. Это позволяет вам объединить вашу более продвинутую логику в одном месте и сделать ваш код более чистым, а расширенную логику более пригодной для повторного использования.

http://docs.codesmithtools.com/display/PLINQO/Query+Extensions

-- ШАБЛОН --

Что касается шаблона, мы, как правило, рекомендуем вам каждый раз обновлять DataContext в операторе using при каждом обращении к БД. LINQ to SQL (и, следовательно, PLINQO) используют шаблон Unit of Work и предназначены для эффективной работы в небольших контролируемых областях.

Другие вопросы по тегам