我正在使用Spring Data和QueryDSL,我面临的情况是我必须根据一个或多个条件检索一组项目。我的问题是:
我是否希望服务层为我的存储库提供谓词?
NSString *albumName=@"My_Videos";
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library addAssetsGroupAlbumWithName:albumName
resultBlock:^(ALAssetsGroup *group) {
NSLog(@"added album:%@", albumName);
}
failureBlock:^(NSError *error) {
NSLog(@"error adding album");
}];
或者我应该像这样隔离Repostory本身的QueryDSL内容吗?
// Repository method
public void findFilteredItems(Predicate conditions);
答案 0 :(得分:3)
我说最干净的方法是List<ItemFilter>
方法,否则服务层和数据层的依赖关系之间存在紧密耦合。此外,您还需要在存储库接口定义中添加特定于技术的依赖项。
但我会说这取决于你的申请。如果您正在处理一个小型应用程序(或微服务),其中存储库层不会与任何其他项目共享,那么将Predicate
放入您的存储库并没有任何问题。 ; s方法签名。
我不知道如何创建Predicate
个对象。如果您已经有一个转换器将ItemFilter
转换为Predicates
,您可以轻松地将该代码放入存储库并创建存储库接口的ItemFilter
部分。