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

时间:2016-01-21 08:03:12

标签: grails groovy gorm

所以我想创建3个插件,其中包括域类和一个宁静的服务,以及每个插件彼此构建的人。

从概念上讲,他们会以这种方式“继承”基础模型:

记录>人>用户

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

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

由于字段的重命名,以及IDE自动完成的便利性,组态域类不是我的选择。

我的两个问题是:

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

1 个答案:

答案 0 :(得分:5)

Trait源代码应该在

  1. Grails 2: src / groovy / [package] [whatever.groovy]
  2. Grails 3: src / main / groovy / [package] [whatever.groovy]
  3. 例如:src/main/groovy/com/my/package/foo.groovy

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

    def everything = Record.list()
    

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