Java 存储库层是否应该始终由服务层封装?

Java 存储库层是否应该始终由服务层封装?,java,spring,jakarta-ee,spring-mvc,Java,Spring,Jakarta Ee,Spring Mvc,在存储库层,我定义了正常的数据操作,如插入、查找等。我使用的是Spring,在类上方有@Repository注释。例如,在@Controller类中直接使用该类是否不好?所有存储库是否都应该始终有一个只委托给存储库层的服务层?这完全取决于您的选择。在SpringRoo中,您不仅跳过了存储库或服务层,而且还使用了一个丰富的域模型,在该模型中,域本身具有数据访问逻辑。Grails上的Groovy等框架使用单个存储库层。因此,我认为直接在控制器中使用它是可以的。我同样问道?他说: 您的[服务层]通常编

在存储库层,我定义了正常的数据操作,如插入、查找等。我使用的是Spring,在类上方有
@Repository
注释。例如,在
@Controller
类中直接使用该类是否不好?所有存储库是否都应该始终有一个只委托给存储库层的服务层?

这完全取决于您的选择。在SpringRoo中,您不仅跳过了存储库或服务层,而且还使用了一个丰富的域模型,在该模型中,域本身具有数据访问逻辑。Grails上的Groovy等框架使用单个存储库层。因此,我认为直接在控制器中使用它是可以的。

我同样问道?他说:

您的[服务层]通常编排业务逻辑的应用程序,但通常不会实际执行,它通常是一个非常薄的包装器

服务层方法可以定义属于事务的操作,因此具有注释以自动为您添加AOP事务支持。另请参见a,其中说明:

Spring的习惯用法建议使用一个了解工作单元的服务接口和一个处理关系数据库的持久化接口。服务接口中的方法应该紧密地映射到您的用例。服务实现知道实现用例目标所需的所有模型和持久性包和类


您可能希望封装存储库的一个原因是将代码库与接口更改隔离开来。我正在从Spring4迁移到Spring5,现在存储库类型的行为有所不同,这意味着我必须要么更改所有控制器类型,要么(更有可能)封装存储库类型,这是我应该首先做的。