Grails 域有一些公共字段,是扩展域还是嵌入域?
当我设计数据库时,我使用嵌入式来嵌入公共字段。但它不能初始化dateCreated和createdBy,我该怎么做?扩展域或嵌入式是处理公共字段的正确方法? 代码怎么说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=
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插件很好。我问这个问题的原因是看到不是每个人都有我认为的态度