java - 如何分离存储库和服务层

标签 java service repository layer

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

但是如何处理丰富的存储库,它不仅提供 CRUD 方法,还提供更多,例如 Spring Data 的 JPARepository?在此类实现中,有太多可能的获取对象的方法,因此在服务中复制它们并不酷。

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

一个。像这样在服务层中复制方法

@Service
class XService{

   @Autowired
   private XRepository repository;

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

B.只需在 Controller 中使用存储库(服务中的 Autowiring 或访问方法)

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

最佳答案

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

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

关于java - 如何分离存储库和服务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17672065/

相关文章:

c++ - 使用 C++ 实现操作系统服务之间的通信

Java 代码 API 存储库

java - 使两个线程独立于进程,而无需 sleep /等待/通知

java - 在 Java 应用程序示例中嵌入 Avatar JS

wcf - Wix安装程序: Verify that you have sufficient privileges to start system services

java - <S extends T> 是什么意思保存(S实体);在 Spring 存储库中?

svn - 在本地机器上临时使用 SVN 离线工作

java - Selenium 网络驱动程序 : cannot be scrolled into view

java - 无法让这个数组工作

windows - 如何使用命令行安装将 Tomcat 7 安装为 Windows 服务