3

应该如何分离Repository 和Service?恕我直言,客户端(例如控制器)应该主要使用服务层而不是存储库,因为它应该与持久性实现分开。Single Repository 应该只提供一个实体的访问方法,而 Service 方法能够提供更复杂的操作,包括使用多个存储库。

但是如何处理丰富的存储库,它不仅提供 CRUD 方法,还提供更多方法,比如 Spring Data 中的 JPARepository?在这样的实现中,有很多可能的获取对象的方法,在 Service 中复制它们并不酷。

那么解决这个问题的方法是什么?

A. 像这样的服务层中的重复方法

@Service
class XService{

   @Autowired
   private XRepository repository;

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

B. 简单地在控制器中使用存储库(自动装配或服务中的访问方法)

C. 还有其他好的方法吗?

4

1 回答 1

6

服务应该实现(业务)逻辑并可能根据该逻辑修改实体。如果您的服务层只是存储库的一个薄包装,即仅按照您的描述获取实体,那么您的设计有问题。

通常逻辑分布在整个控制器中。识别该逻辑,将其提取并封装在服务中,并通过编排适当的服务来限制控制器来管理应用程序的流程。

于 2013-07-16T09:32:28.547 回答