Grails 域有一些公共字段,是扩展域还是嵌入域?

Grails 域有一些公共字段,是扩展域还是嵌入域?,grails,dns,domain-driven-design,gorm,Grails,Dns,Domain Driven Design,Gorm,当我设计数据库时,我使用嵌入式来嵌入公共字段。但它不能初始化dateCreated和createdBy,我该怎么做?扩展域或嵌入式是处理公共字段的正确方法? 代码怎么说 class Created { Date dateCreated Long createdBy def beforeInsert() { dateCreated= new Date() createdBy=

当我设计数据库时,我使用嵌入式来嵌入公共字段。但它不能初始化dateCreated和createdBy,我该怎么做?扩展域或嵌入式是处理公共字段的正确方法? 代码怎么说

    class Created {
      Date dateCreated
      Long createdBy
        def beforeInsert()
            {
             dateCreated= new Date()
             createdBy=0
        }
   }

class Updated {

Date lastUpdated
Long updatedBy

//it works?
def beforeUpdate(){
    lastUpdated=new Date()
    updatedBy=0
}
//it works?
def beforeInsert(){
    lastUpdated=new Date()
    updatedBy=0
}
}


class CreatedUpdated {

Created created

Updated updated

//Must use the embedded option, or the type of exception, can not find CreatedUpdated
static embedded = ['created','updated']
}

class Term {

String name

CreatedUpdated createdUpdated

static embedded = ['createdUpdated']

    Term parent

    static hasMany =[terms:Term]

    static mapping = {
        version false
   }

   String toString()
  {
    name
  }

static constraints = {
    name unique:true,size: 1..20
    parent nullable: true  
    createdUpdated display:false,nullable:true
    terms display:false
    url url: true
}
   }
还是使用扩展

   class Term extends CreatedUpdated{
    String name

    Term parent

    static hasMany =[terms:Term]

    static mapping = {
        version false
   }

   String toString()
  {
    name
  }

static constraints = {
    name unique:true,size: 1..20
    parent nullable: true  
    terms display:false
    url url: true
}
   }
`


对我来说什么是正确的?

我肯定会将这个示例嵌入其中,而不是继承。我认为您不应该仅仅基于对象包含公共字段这一事实来进行此调用。相反,如果继承对使用标准OO设计技术的模型有意义,则应该使用继承。例如,如果“myClass是myBaseClass”不成立,则继承可能是错误的解决方案

一般来说,我会远离像
CreatedUpdated
这样的类,它们只是属性的集合,而不是域中的实际对象。Java/Groovy只有一个继承,因此只有当您有一个这样的基类时,这才有效


另外,对于该特定情况,创建并更新时间戳。如果您使用的是spring security,请查看自动创建
createdBy
updatedBy
列的功能。

我肯定会将此示例嵌入而不是继承。我认为您不应该仅仅基于对象包含公共字段这一事实来进行此调用。相反,如果继承对使用标准OO设计技术的模型有意义,则应该使用继承。例如,如果“myClass是myBaseClass”不成立,则继承可能是错误的解决方案

一般来说,我会远离像
CreatedUpdated
这样的类,它们只是属性的集合,而不是域中的实际对象。Java/Groovy只有一个继承,因此只有当您有一个这样的基类时,这才有效


另外,对于该特定情况,创建并更新时间戳。如果您使用的是spring security,请查看自动创建
createdBy
updatedBy
列的功能。

在这种特殊情况下,审计跟踪插件应该满足要求。但是,如果您对没有插件的其他字段有这样的要求,那么一个可能的解决方案是在编译时通过注入这样的公共字段。内部审计跟踪插件使用这个概念来注入这些字段。根据您的需求,您可以使用全局AST转换或本地AST转换。

在这种特殊情况下,审计跟踪插件应该满足要求。但是,如果您对没有插件的其他字段有这样的要求,那么一个可能的解决方案是在编译时通过注入这样的公共字段。内部审计跟踪插件使用这个概念来注入这些字段。根据您的要求,您可以使用全局AST转换或本地AST转换。

谢谢。audit-trail插件很好。我问这个问题的原因是看到不是每个人都有我认为的态度。谢谢。audit-trail插件很好。我问这个问题的原因是看到不是每个人都有我认为的态度