簡體   English   中英

如何分離存儲庫和服務層

[英]How to separate Repository and Service Layers

應該如何分離存儲庫和服務? IMHO客戶端(例如Controller)應該主要使用服務層而不是存儲庫,因為它應該與持久性實現分開。 單一存儲庫應提供僅訪問一個實體的方法,而服務方法能夠提供更復雜的操作,包括使用多個存儲庫。

但是如何處理豐富的存儲庫,它不僅提供了CRUD方法,還提供了更多,比如Spring Data的JPARepository? 在這樣的實現中,有很多可能的獲取對象的方法,在Service中復制它們並不酷。

那么這個問題的解決方案是什么?

A.像這樣在服務層中重復方法

@Service
class XService{

   @Autowired
   private XRepository repository;

   public List<X> findAll(){
        return repository.findAll();
   }
}

B.只需在控制器中使用存儲庫(自動裝配或服務中的訪問方法)

C.還有其他好方法嗎?

服務應該實現(業務)邏輯,並可能根據該邏輯修改實體。 如果您的服務層只是存儲庫的一個薄包裝器,即只根據您的描述提示獲取實體,那么您的設計就會出現問題。

邏輯通常遍布控制器。 識別該邏輯,將其提取並封裝在服務中,並通過編排適當的服務來限制控制器管理應用程序的流程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM