在 Grails 中将特征用于水平域 class 重用,是个好主意吗?

Using traits for horizontal domain class reuse in Grails, a good idea?

所以我想创建 3 个插件,其中包括域 classes 和一个 restful 服务,每个插件都建立在彼此之上。

从概念上讲,他们会这样 "inherit" 基本模型:

记录 > 人物 > 用户

但是我从友好手册中读到继承可能会导致一些性能问题。

然后我突然想到,由于 Groovy 具有水平重用能力(即特征),我很可能只定义特征中的所有内容,然后在域 class 中实现特征。

撰写域 classes 对我来说不是一个选项,因为字段的重命名,以及失去 IDE 自动完成的便利性。

我的两个问题是:

Trait源代码应该在

  1. Grails 2:src/groovy/[包][whatever.groovy]
  2. Grails 3:src/main/groovy/[包][whatever.groovy]

例如:src/main/groovy/com/my/package/foo.groovy

您将遇到的主要问题是您将失去执行多态查询的能力。例如,通过继承,您可以这样做:

def everything = Record.list()

everything 将包含 RecordPersonUser 实例。有点像 SQL 联合查询。当使用特征而不是继承时,你会失去这种能力。