簡體   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