Grails2.5.5约束不从traits导入

Grails2.5.5约束不从traits导入,grails,traits,Grails,Traits,给定以下特征和域类定义: @grails.validation.Validateable trait SynchronizedData { String synchronizationId static constraints = { synchronizationId(blank: false, maxSize: 30, unique: true) } } class Carrier implements SynchronizedData {

给定以下特征和域类定义:

@grails.validation.Validateable
trait SynchronizedData {
    String synchronizationId

    static constraints = {
        synchronizationId(blank: false, maxSize: 30, unique: true)
    }
}

class Carrier implements SynchronizedData {

    static constraints = {
        importFrom SynchronizedData
    }
}

域类载体中的字段“SynchronizationId”未从SynchronizedData特征中获取导入的约束。这是否是2.5.x importFrom支持中的一个限制,而不是从traits导入?当从超类导入时,它确实起作用。

为什么要将其作为一种特性?因为我想要一系列可重用的域模式,我希望能够应用于域对象。SynchronizedData只是这样一种模式的一个例子。我还有大约20个其他特性,通过实现多个特性,我可以将这些使用模式组合到业务领域中。其他的例子包括AccessControlledObject、GuidData、InternationalizedNameData等,直到我们被迫对特征进行子分类,这严重限制了我们组合模式的能力。这一切都是可行的,但如果importFrom对trait中定义的约束起作用就好了,因为很多约束都很复杂。我不认为我们的文档中有任何地方建议某个特征可以被验证,但如果我们有,我们可能应该解决这个问题。好的,我理解它不受支持。我很惊讶您认为使用traits来编写域类很奇怪。为什么一个域会与您想要结合公共抽象特征的任何其他类不同?我想提供可重用的功能,包括在许多域类中作用于这些属性的属性和相关方法。我没有在示例中包括任何方法,因为我认为它们不相关。我想对这个概念进行更广泛的讨论,但这可能不是合适的地方。我在哪里可以做到这一点呢?“我很惊讶你认为使用traits来构建域类很奇怪。”-我不这么认为。在Grails3中,所有域类都这样做。我们在编译时添加相应的特征。