如何保持存储库类的精益?

时间:2014-07-30 12:14:56

标签: design-patterns repository repository-pattern

我一直在阅读有关存储库,通用存储库,UoW等和替代品的很多内容。似乎每个人都对他们有意见。有人说不使用通用回购,因为它是一种不必要的抽象。其他人说UoW也是不必要的抽象。有些人说要将通用功能放入基类中,并且repo可以继承它。

我想知道保持存储库轻量化和精益化的最佳方法是什么 - 这样可以避免像FindAllOrdersFromTwoYearsAgoFromAlaska那样高度专业化的查询?

我看到的一个选项是返回IQueryables并在服务层中进行任何其他过滤

此外,似乎查询命令是另一种避免上述查询之类的事情发生的方法。只是寻找一些关于保持回购轻盈和精益的指导。

希望这不会被视为基于意见的线索之一。

1 个答案:

答案 0 :(得分:0)

如果你真的需要它,总会有Query Object Pattern这就是Hibernate的Criteria Queries使用的模式。

OrderQuery query = new OrderQueryBuilder()
                          .whereDate(from(2012))
                          .whereLocation(eq("Alaska"))
                          .build();

Stream<Order> orders = orderRepository.findAllThatMatch(query);

但是,除非您需要进行大量的即席查询,否则很少需要它。查看您必须编写的所有代码,只支持这一个查询!从努力的角度来看,通常更好的方法是向存储库添加更多方法。