繁体   English   中英

存储库上的事务

[英]transactions on repositories

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

@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);
}

我听到服务层上的mantra 事务,服务层上的 事务 ; 但是将存储库直接注入控制器会是如此糟糕。 在第一次创建存储库事务之后 - 需要传播以便创建事务(如果尚未存在)?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM