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/