Шаблон репозитория со смешанной логикой - PullRequest
1 голос
/ 03 мая 2011

В моем ProductRepository есть метод, скажем:

GetAllCalculatedProducs(int categoryId) {}

Этот метод использует класс Calculator для вычисления многих значений продукта.Это выглядит примерно так:

public IEnumerable<Product> GetAllCalculatedProducts(int categoryId)
{
  var items = GetAllProductsByCategoryId(categoryId);

  Calculator c = new Calculator(items);
  c.Calculate();

  Filter f = new Filter(c.Items);
  f.Filter();

  Sorter s = new Sorter(f.Items);
  s.Sort();

  return s.Items;
}

Калькулятор выполняет свою работу, используя другие репозитории.

[DB] <-> [Repository] <- | Business Logic |-> [Калькулятор]

Я предполагаю, что это неправильно из-за того, что репозиторий использует класс, который принадлежит логике.Я даже думаю, что этот метод должен быть в другом месте, может быть, в ProductService?но я не уверен.

А можно ли использовать Filter и Order в хранилище?

1 Ответ

0 голосов
/ 03 мая 2011

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

Если бы он сгенерировал собственный запрос и выполнил некоторую фильтрацию и сортировку по нему, у меня не было бы проблем с этим.

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