grails - 在 Grails 中使用特征进行水平域类重用,是个好主意吗?

标签 grails groovy grails-orm

所以我想创建 3 个插件,其中包括域类和一个 Restful 服务,并且每个插件都构建在彼此之上。

从概念上讲,他们会这样“继承”基本模型:

记录>人员>用户

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

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

由于字段的重命名,组合域类对我来说不是一个选择,而且还失去了 IDE 自动完成的便利性。

我的两个问题是:

  • 最好将这些特征放置在 Grails 项目结构的哪个部分。
  • 这会导致不同的问题吗?

最佳答案

Trait 源代码应位于

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

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

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

def everything = Record.list()

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

关于grails - 在 Grails 中使用特征进行水平域类重用,是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34918306/

相关文章:

Grails 3 应用程序或插件

mongodb - Grails Mongo低级API

java - java/groovy 中属性的一对多映射(文件到设备)

list - Groovy 压缩列表或按级别展平

eclipse - STS 是否支持本地 Groovy 安装?

hibernate - 在 GORM 中查询计算字段

grails - 如何对 grails 上的域字段应用新验证

grails - 重新读取/重新加载Grails配置文件,而无需重新启动容器

hibernate - hibernate 关联缓存

mysql - 通信链接失败时Grails重新连接到mysql