存储库和服务层,QueryDSL和Spring数据

时间:2016-02-04 12:43:03

标签: spring architecture spring-data software-design

我正在使用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);

1 个答案:

答案 0 :(得分:3)

我说最干净的方法是List<ItemFilter>方法,否则服务层和数据层的依赖关系之间存在紧密耦合。此外,您还需要在存储库接口定义中添加特定于技术的依赖项。

但我会说这取决于你的申请。如果您正在处理一个小型应用程序(或微服务),其中存储库层不会与任何其他项目共享,那么将Predicate放入您的存储库并没有任何问题。 ; s方法签名。

我不知道如何创建Predicate个对象。如果您已经有一个转换器将ItemFilter转换为Predicates,您可以轻松地将该代码放入存储库并创建存储库接口的ItemFilter部分。