Использовать шаблон хранилища при использовании сгенерированных данных PLINQO? - PullRequest
0 голосов
/ 16 июня 2010

Я "обновляю" приложение 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 Ответ

2 голосов
/ 16 июня 2010

- ПОСЛЕДНИЕ ЗАПРОСЫ -

Расширения запросов 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 в оператор использования каждый раз, когда вы хотите получить доступ к БД. LINQ to SQL (и, следовательно, PLINQO) используют шаблон «Единица работы» и предназначены для эффективной работы в небольших контролируемых областях.

...