我正在为留言板实现一个自引用GORM对象。到目前为止,伪GORM类:
class Article {
String title
Article parent
static belongsTo = [parent: Article]
static hasMany = [children: Article]
static constraints = {
parent(nullable: true)
}
static transients = ['descendants', 'ancestors']
def getDescendants() {
return children ? children*.descendants.flatten() + children : []
}
def getAncestors() {
return parent ? parent.ancestors.flatten() + this : []
}
}
所以,这在我的本地方框上工作得很好,但是它会在网站上扩展,每天都会有成千上万的独立内容。
自从Burt Beckwith的演讲http://www.infoq.com/presentations/GORM-Performance以来,我倾向于不使用hasMany / belongsTo。
主要是阅读消息与添加新消息。
我可以缓存getDescendants和getAncestors调用。
我可以添加一个名为“hasChildren”的新布尔值。可以使用override addToChildren和removeFromChildren方法操作此字段。使用“hasChildren”可能会阻止像
这样的事情if (article.children.size() > 0) // show replies
代替:
if (article.hasChildren) // show replies
思考?建议?
提前致谢, 托德