使用服务中的存储库和控制器中的服务

时间:2018-01-15 18:56:57

标签: java spring spring-mvc spring-boot

我以这样的方式编程,以避免在其他服务https://github.com/JonkiPro/REST-Web-Services/tree/master/core/src/main/java/com/core/jpa/service中使用服务。我尝试只使用服务上的存储库。我目前正在编写一个使用两种服务的控制器。一个用于保存云中的文件,另一个用于在云中保存带有文件标识符的实体。

    @PutMapping(value = "/contributions/{id}/photos")
@ResponseStatus(HttpStatus.NO_CONTENT)
public
void updatePhotoContribution(
        @PathVariable("id") final Long id,
        @RequestParam(required = false) Set<Long> elementIdsToAdd,
        @RequestPart(required = false) List<MultipartFile> elementsToAdd,
        @RequestPart(required = false) List<MultipartFile> newElementsToAdd,
        @RequestParam(required = false) Set<Long> idsToUpdate,
        @RequestPart(required = false) List<MultipartFile> elementsToUpdate,
        @RequestParam(required = false) Set<Long> idsToDelete,
        @RequestParam final Set<String> sources,
        @RequestParam(required = false) final String comment
) {
    Set<String> ids = new HashSet<>();

    for(files) {
        String id = this.storageService.save(...); // Save the file in the cloud with file identifiers stored in the cloud
        ids.add(id);
    }

    Contribution contribution = //create contribution

    try {
        this.movieContributionPersistenceService.updateReviewContribution(contribution, id, this.authorizationService.getUserId());
    } catch(ResourceNotFoundException e) {
        //  remove the file from the cloud
        throw new ResourceNotFoundException(e.getMessage());
    } catch(ResourceConflictException e) {
        //  remove the file from the cloud
        throw new ResourceConflictException(e.getMessage());
    }
}

这是我遇到的问题的唯一解决方案。如果我在movieContributionPersistenceService中使用了storageService,它看起来会更好,但我坚持认为我只在服务上使用存储库。你觉得怎么样?

那是我之前基于同一原则创建的另一个控制器:https://pastebin.com/Ry1gcYdL

1 个答案:

答案 0 :(得分:0)

在其他服务中自动装配服务并不是一个灾难性的结构,但这样你最终会将服务结合起来,从而导致维护问题。

而不是耦合您的服务,您可以使用通用功能创建一个util,并使两个服务都使用它。