具有混合逻辑的存储库模式

时间:2011-05-03 10:10:47

标签: c# repository-pattern

我的ProductRepository有一个方法,比如说:

GetAllCalculatedProducs(int categoryId) {}

此方法使用类计算器计算产品的许多值。它看起来像这样:

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]&lt; - &gt; [Repository]&lt; - | Business Logic | - &GT;   [计算器]

我认为这是错误的,因为Repository使用属于Logic的类。我甚至认为这种方法应该在ProductService中的其他地方?但我不确定。

可以在存储库中使用过滤器和订单吗?

1 个答案:

答案 0 :(得分:0)

我只向存储库添加直接或间接对数据库起作用的方法。您的方法不会这样做,它会调用与数据库一起使用的GetAllProductsByCategoryId。因此,它应该是服务的一部分。

如果它已经生成了一个自己的查询并对其进行了一些过滤和排序,我就不会有任何问题。