Net Core Может ли приложение иметь как репозиторий, так и шаблон объекта доступа к данным DAO? - PullRequest
0 голосов
/ 02 октября 2018

Я читал, что репозитории НЕ должны использовать IQueryable.Простой пример репозитория имеет ListAll, FindById, Add, Delete.Ниже приведен пример списка товаров в репозитории.Если я не могу наложить запросы и требовать поисковые запросы, например, ProductTable по категориям или ProductTable по весу (сложные запросы), мне потребуется DAO (шаблон объекта доступа к данным).

Итак, вопрос в том,

(а) нормально ли иметь шаблон репозитория и шаблон DAO в одном приложении?

(б) Разве это не обходит весьсмысл наличия шаблона репозитория DDD?

Как мне получить доступ к ProductTable с запутанными запросами, все еще проходя через репозиторий?Первый запрос к репозиторию будет медленным.

public virtual IEnumerable<Products> List()
{
    return _dbContext.Products.AsEnumerable();
}

// This repository pattern will be slow, first it access all product and Then filters

var result = context.products()
               .Where(o => o.ProductCategoryId== 5);


// This is dao pattern, with more specific queries

var result = context.products.AsEnumerable()
               .Where(o => o.ProductCategoryId== 5);

Шаблон репозитория Entity Framework, почему не вернуть Iqueryable?

https://deviq.com/repository-pattern/

1 Ответ

0 голосов
/ 02 октября 2018

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

A запрос слой читает модель , которая возвращает только релевантные данные в максимально упрощенном механизме.Вы можете рассматривать это как DAO, но на самом деле это не то же самое, хотя оно, безусловно, сфокусировано на извлечении data .

В этом смысле вы являетесьПредложение о том, что эти два механизма не только жизнеспособны, но я настоятельно рекомендую вам пойти по этому пути:)

Поскольку намерение между этими двумя механизмами настолько различно, что наличие механизма запросов никоим образом не уменьшает полезности хранилища..

...