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

早过忘川 提交于 2019-12-07 21:46:49

问题


So I want to create 3 plugins which include domain classes and a restful service, and who each build on top of each other.

Conceptually, they would "inherit" the base model this way:

Record > Person > User

However I have Read From The Friendly Manual that inheritance may cause some performance issues.

Then it crossed my mind that since Groovy has horizontal reuse capabilities (i.e. traits), I may very well just define everything in the trait and then implement the trait in the domain class.

Composing domain classes is not an option for me because of the renaming of the fields, and well, the loss of the convenience of IDE auto-completion.

My two questions are:

  • In what part of the Grails project structure would it be best to place these traits.
  • Can this cause different problems?

回答1:


The Trait source code should be in

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

For example: src/main/groovy/com/my/package/foo.groovy

The main issue you'll have is that you'll loose the ability to perform polymorphic queries. For example, with inheritance you can do something like this:

def everything = Record.list()

and everything would contain Record, Person, and User instances. Kind of like a SQL union query. When using Traits instead of inheritance you loose this ability.



来源:https://stackoverflow.com/questions/34918306/using-traits-for-horizontal-domain-class-reuse-in-grails-a-good-idea

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!