无继承的域类的重用属性,约束和行为

问题描述 投票:0回答:1

由于继承,我们正在处理很多问题。我们所做的所有域类都从具有共同属性的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等?

grails gorm traits
1个回答
0
投票

是否有机会不重写所有属性/约束/映射/ beforeInsert等在每个子类中?

是,但是正确的解决方案取决于了解您的域。您可以进行复杂的AST转换,可以使用聚合代替继承,可以使用共享约束,可以使用事件侦听器代替beforeInsertbeforeUpdate等。有很多选项。

© www.soinside.com 2019 - 2024. All rights reserved.