我一直在阅读有关存储库,通用存储库,UoW等和替代品的很多内容。似乎每个人都对他们有意见。有人说不使用通用回购,因为它是一种不必要的抽象。其他人说UoW也是不必要的抽象。有些人说要将通用功能放入基类中,并且repo可以继承它。
我想知道保持存储库轻量化和精益化的最佳方法是什么 - 这样可以避免像FindAllOrdersFromTwoYearsAgoFromAlaska那样高度专业化的查询?
我看到的一个选项是返回IQueryables并在服务层中进行任何其他过滤
此外,似乎查询命令是另一种避免上述查询之类的事情发生的方法。只是寻找一些关于保持回购轻盈和精益的指导。
希望这不会被视为基于意见的线索之一。
答案 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);
但是,除非您需要进行大量的即席查询,否则很少需要它。查看您必须编写的所有代码,只支持这一个查询!从努力的角度来看,通常更好的方法是向存储库添加更多方法。