1

我的控制器看起来像这样:

@RequestMapping(value = "/User", method = RequestMethod.GET)
public @ResponseBody String getUser(@RequestParam long id) {
User user = userService.get(id);
return user.name;
}

服务看起来像这样

@Transactional(readOnly = true)
public User getUser(long id) {
  return userRepository.get(id);
}

我听到了服务层上的口头禅交易,服务层上的交易;但是将存储库直接注入控制器会很糟糕吗?在首先使存储库具有事务性 - 需要传播之后,如果不存在,它将创建一个事务?

4

1 回答 1

4

这取决于项目的规模和其中的复杂性。当多个存储库需要交互时,我觉得服务工作得很好。

例如,BankAccountService 需要使用 AccountRepository 来借记/贷记帐户,同时还需要使用 LedgerRepository 来记录交易。

如果您只是执行 crud 操作,我会毫不犹豫地将存储库放在控制器中。如果您的操作更先进,我会采用服务方法。解决您最简单的用例,然后在引入更多复杂性时进行重构。预先做一个大的设计经常违反“你不需要它”的原则。

当不同的控制器需要执行相同的操作时,服务也很方便。因此,如果您正在创建的逻辑是特定于控制器的,并且您不需要重用代码,那么将存储库放在控制器中是有意义的。如果您需要在其他控制器中复制逻辑,则服务可能是更好的选择,因为它是可重用的。

于 2012-12-05T09:29:00.460 回答