【发布时间】:2015-03-13 07:19:55
【问题描述】:
我们公司使用的大多数域对象都有一些共同的属性。这些代表创建对象的用户、上次更新对象的用户以及他们用来执行此操作的程序。
为了DRY退出我的域类,我想找到一些方法将相同的 beforeInsert 和 beforeUpdate 逻辑添加到所有具有这些列的域类,而不会干扰那些没有这些列的域类。
我希望 喜欢 的方法是使用 Mixin 及其自己的 beforeInsert 和 beforeUpdate 方法。我知道you can use Mixins on domain classes。
package my.com
import my.com.DomainMixin
@Mixin(DomainMixin)
class MyClass {
String foo
String creator
String updater
static constraints = {
creator nullable:false
updater nullable:false
}
}
package my.com
class DomainMixin {
def beforeInsert() {
this.creator = 'foo'
this.updater = 'foo'
}
def beforeUpdate() {
this.updater = 'bar'
}
}
单元测试表明,当以这种方式实现时, beforeInsert 方法实际上并没有被触发。
旁注: 我也知道to add the methods in a BootStrap.groovy file 可以使用metaClass,但是我的好奇心已经控制了我,我真的很想看看mixin 是否有效。随意告诉我,这是更好的方法,我不应该在人不应该的地方混淆。
【问题讨论】:
标签: grails groovy grails-orm mixins