存储库和服务层、QueryDSL 和 Spring 数据
Repository and Service layer, QueryDSL and Spring Data
我正在使用 Spring 数据和 QueryDSL,我面临着这样一种情况,我必须根据一个或多个条件检索一组项目。我的问题是:
我是否应该期望服务层为我的存储库提供谓词?
// Repository method
public void findFilteredItems(Predicate conditions);
或者我应该像这样在存储库中隔离 QueryDSL 内容吗?
// Repository method
public void findFilteredItems(List<ItemFilter> conditions);
我认为最干净的方法是List<ItemFilter>
方法,否则服务层和数据层的依赖关系之间存在紧耦合。此外,您会在存储库接口定义中放置技术特定的依赖项。
但我会说这取决于您的应用程序。如果您正在处理一个小型应用程序(或微服务),其中存储库层永远不会与任何其他项目共享,那么将 Predicate
放在存储库的方法签名中没有任何问题。
我不知道您是如何创建 Predicate
对象的。如果您已经有一个将 ItemFilter
s 转换为 Predicates
的转换器,您可以轻松地将代码放入存储库并使 ItemFilter
成为存储库界面的一部分。
我正在使用 Spring 数据和 QueryDSL,我面临着这样一种情况,我必须根据一个或多个条件检索一组项目。我的问题是:
我是否应该期望服务层为我的存储库提供谓词?
// Repository method
public void findFilteredItems(Predicate conditions);
或者我应该像这样在存储库中隔离 QueryDSL 内容吗?
// Repository method
public void findFilteredItems(List<ItemFilter> conditions);
我认为最干净的方法是List<ItemFilter>
方法,否则服务层和数据层的依赖关系之间存在紧耦合。此外,您会在存储库接口定义中放置技术特定的依赖项。
但我会说这取决于您的应用程序。如果您正在处理一个小型应用程序(或微服务),其中存储库层永远不会与任何其他项目共享,那么将 Predicate
放在存储库的方法签名中没有任何问题。
我不知道您是如何创建 Predicate
对象的。如果您已经有一个将 ItemFilter
s 转换为 Predicates
的转换器,您可以轻松地将代码放入存储库并使 ItemFilter
成为存储库界面的一部分。