Я реализую объект 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 : []
}
}
Итак, на моем локальном компьютере это работает нормально, но будет ли оно масштабироваться на сайте с тысячами ежедневных уникальных сообщений - моя забота.
С момента презентации Бёрта Беквита http://www.infoq.com/presentations/GORM-Performance и я склонен не использовать hasMany / ownTo.
Это будет в первую очередь чтение сообщений против добавления новых.
Я мог бы кэшировать вызовы getDescendants и getAncestors.
Я мог бы добавить новое логическое значение с именем "hasChildren". Этим полем можно манипулировать с помощью методов переопределения addToChildren и removeFromChildren. Использование hasChildren может предотвратить такие вещи, как
if (article.children.size() > 0) // show replies
вместо
if (article.hasChildren) // show replies
Мысли? Предложения?
Заранее спасибо,
Тодд