Использовать шаблон хранилища при использовании сгенерированных данных 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 и предназначены для эффективной работы в небольших контролируемых областях.