GORM数据服务VS Grails服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GORM数据服务VS Grails服务相关的知识,希望对你有一定的参考价值。

GORM 6.1引入了数据服务的概念。我认为它们是在编译时检查的自动生成的持久性逻辑。我对以下内容感到困惑:

  1. 它们与Grails Services有何不同(除了编译时间差异)?
  2. 是否仍然可以在GORM数据服务中实现我的自定义业务逻辑,或者我是否需要维护两个服务,一个用于持久性(GORM),另一个用于其他无持久性相关业务逻辑(GRAILS)(例如,发出外部REST请求)并根据回应采取行动)。
  3. 我注意到grails generate-all Domain为REST配置文件生成了一个数据服务接口。这让我很困惑,我们是否可以在服务中使用非持久性相关的方法名称。

更新:我要问的是:gorm.grails.org/latest/hibernate/manual/#dataServices。我试图了解它们与此有何不同:docs.grails.org/latest/guide/services.html以及何时使用它们。

答案

它们与Grails Services有何不同(除了编译时间差异)?

GORM Data Services是Grails服务。

是否仍然可以在GORM数据服务中实现我的自定义业务逻辑,或者我是否需要维护两个服务,一个用于持久性(GORM),另一个用于其他无持久性相关业务逻辑(GRAILS)(例如,发出外部REST请求)并根据回应采取行动)。

您可以将业务逻辑放在您喜欢的任何服务中。通常,GORM数据服务中的逻辑应该与数据库交互相关,但这完全取决于您。如果您希望将100%的业务逻辑放在GORM数据服务实例中,尽​​管这没有意义。 GORM数据服务是一项服务,您可以随意添加任何内容。

我注意到grails generate-all Domain为REST配置文件生成数据服务接口。这让我很困惑,我们是否可以在服务中使用非持久性相关的方法名称。

您可以在服务中使用非持久性相关的方法名称。你可以在服务中放置任何你想要的东西。

我将采用的方法是将GORM数据服务用于数据库相关代码,并将传统的Grails服务用于其他所有内容,并在适当的时候将1注入其中。

另一答案

我根据您在下面给出的要点区分了您的问题。

  1. 所有GORM持久性方法都已编译(JAR文件),但不是您正在实现/编写的服务方法调用,它们在您键入和保存代码时动态编译。 GORM方法得到了很好的优化。
  2. 可以在单个方法中编写自定义业务逻辑和GORM API调用,但是如果要为许多其他控制器调用编写通用方法并且还希望避免复杂性,则需要了解该方案。在这种情况下,您可以为上述两种情况单独调用。对于简短的自定义业务逻辑,您可以在同一方法中编写代码。
  3. 我们也可以在同一个服务中编写非持久性相关的方法,但这取决于你。您还可以为这些方法创建单独的服务,或使用现有的其他方法来避免任何混淆和复杂性。

注意:默认情况下,服务是事务性的,但如果它们的方法都不更新持久性存储,则可以使其成为非事务性的。

以上是关于GORM数据服务VS Grails服务的主要内容,如果未能解决你的问题,请参考以下文章

Grails 数据库迁移 - dbm-gorm-diff 不起作用

在 Grails/GORM 中定义默认排序顺序

Grails + GORM:GORM 中默认的 equals() 实现是啥?

如何覆盖 Grails GORM 中关系的级联删除?

如何从 Grails 服务 (JPA + GAE) 中访问 EntityManager

跨两个数据源的 Grails GORM 域关联