使用Spring从控制器层调用存储库和服务

Thi*_*aut 7 java model-view-controller service spring repository

我使用Spring Boot和Spring Data.

我不介意将存储库层和服务层分开

所以我有我的UserRepository和CRUD方法以及一些Spring Data方法

  • 找到所有
  • findByUsername

我也有UserService和业务方法.

  • checkPassword(字符串登录,字符串密码)
  • businessMethodAction(String username)

这是我的问题:

在我的控制器中,我必须从UserService调用方法,有时从UserRepository调用.目前,我在我的控制器中注入了两个,我称之为服务或存储库

@Inject
UserService userService;

@Inject
UserRepository userRepository;

@RequestMapping("{username}")
private void myMethod(@PathVariable String username){
    return userRepository.findOne(username);
}

@RequestMapping("{username}/doBusineesAction")
private void myMethod(@PathVariable String username){
    return userService.doLogicalThin(username);
}
Run Code Online (Sandbox Code Playgroud)

我只是在问,因为我很难注入并同时在同一个班级中调用一个或另一个

另一方面,这意味着在服务层中复制方法,就像这样

public User findOne(String username){
 return userRepository.findOne(username);
}
Run Code Online (Sandbox Code Playgroud)

你怎么看?

Sam*_*uel 16

控制器层不应该直接调用存储库.您应该始终使用服务层,因为服务层封装了围绕该调用的业务逻辑.仅仅因为目前没有任何业务逻辑,并不意味着你应该完全跳过该层.

  • 如果它像findById方法一样简单怎么办?如果我们将来确实要添加业务逻辑,那么可以将其带回到服务层,但是为什么仅仅通过六个月的时间就可以通过业务层实施它,所以我们可能会围绕它使用一些业务逻辑。 (2认同)
  • 请注意,这是一个固执己见的答案。就我个人而言,我会说 YAGNI - 仅在实际需要时创建服务类/方法。没有人需要另一层无用的样板。 (2认同)