由于继承,我们正在处理很多问题。我们所做的所有域类都从具有共同属性的Component.groovy扩展而来。
我们需要摆脱该类,但如果可能的话,我们希望将通用属性仅保留在一个位置(在每个表上创建列都没有问题)。
我正在尝试使用Trait来执行此操作,但无法使其正常工作。重要提示:我们正在使用Grails 2.5.2 :(
我们当前的代码是(保持简单):
abstract class Component {
Date createdDate = new Date()
Long createdById = 0
....
static constraints = {
createdDate nullable: false
createdById nullable: false
...
}
static mapping = {
tablePerHierarchy false
}
def beforeInsert() {
def user = Holders.grailsApplication.mainContext.getBean('springSecurityService').currentUser
if (user) {
createdById = user.id
createdDate = new Date()
}
}
def beforeUpdate() {
...
}
}
class User extends Component {
...
}
是否有机会不重写每个子类中的每个属性/约束/映射/ beforeInsert等?
最佳答案
Is there a chance to not rewrite every property/constraint/mapping/beforeInsert, etc, in each subclass?
是的,但是正确的解决方案取决于了解您的域。您可以进行复杂的AST转换,可以使用聚合代替继承,可以使用共享约束,可以使用事件侦听器代替
beforeInsert
,beforeUpdate
等。有很多选择。
关于grails - 重用域类的属性,约束和行为,而无需继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59365925/