由于继承,我们正在处理很多问题。我们所做的所有域类都从具有共同属性的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等?
是否有机会不重写所有属性/约束/映射/ beforeInsert等在每个子类中?
是,但是正确的解决方案取决于了解您的域。您可以进行复杂的AST转换,可以使用聚合代替继承,可以使用共享约束,可以使用事件侦听器代替beforeInsert
,beforeUpdate
等。有很多选项。