2013-05-06 2 views
0

У меня разные классы в приложении Grails, которые пользователь должен создавать для комментариев. Е.Г., пост, книги, статьиКаков наилучший способ сделать классные классы Grails доступными для комментариев?

Установка

static hasMany = [comments: Comment] 

к каждому классу, кажется плохим решением. Каков наилучший способ сделать их комментируемыми? Как должен выглядеть общий класс комментариев?

+0

Почему, по вашему мнению, это плохое решение? – Nix

+0

Кажется, это не так элегантно. Как создать класс комментариев? – confile

+1

На самом деле существует [Commentable Plugin] (http://grails.org/plugin/commentable), который работает очень хорошо. – Kelly

ответ

0

Здесь вы можете использовать Наследование.

Создать базовый класс, который будет иметь этот параметр

static hasMany = [comments: Comment] 

& пусть все другие классы, т.е. сообщение, книги, статьи, унаследуют его.

0

Простейшим является определение защищаемого интерфейса в src/groovy, и ваши классы наследуют этот интерфейс. Это просто нормальное java-кодирование, но позволяет централизовать весь ваш код, связанный с комментариями, надеюсь, вокруг службы grails. Если вы хотите получить фантазию, вы можете использовать аннотацию для этого.

После того, как вы это сделали, вы можете переместить этот код в плагин, чтобы вы могли использовать его в разных проектах.

+5

Конечно, и вы могли бы также вызвать плагин «commentable»;) http://grails.org/plugin/commentable –

+1

да, но более распространенный сценарий, который я видел, - это люди, использующие комментарии facebook или disqus вместо того, чтобы создавать все в доме. В этом случае комментарии действительно просто логические. Это решение подходит для обоих вариантов использования. –

0

Почему это плохое решение? Похоже на меня. У вашего домена действительно есть много комментариев, не так ли?

+0

Вопрос в том, как создать класс комментариев? – confile

+0

Подсказка: это [принадлежит: YourOtherDomainClass] – Georgemc

0

Вы можете создать также абстрактный базовый класс, который можно комментировать, а затем другие домены могут распространяться Commentable. Теперь вы можете создать класс Comment со свойством commentTable. Вы также можете реализовать getComments в классе Commentable простым Commentable.findAllBy (this). На мой взгляд, это также хорошая идея избежать «hasMany» отношений.