Как моделирование домена в Grails влияет на атрибуты поля? - PullRequest
0 голосов
/ 30 ноября 2011

Допустим, у меня есть класс домена с именем Tag в моем приложении Grails.

class Tag {
    String name // line number 1
    User user  // Line number 2
        static constraints = {
        }
    static belongsTo = [User, Post]
}

Я создаю связь между User и Tag с помощью ключевого слова belongsTo. Но у меня есть сомнения по поводу line number 2, то есть User user. Теперь размещение этого кода в моем классе Tag каким-либо образом повлияет на отношения между Tag и User, или имеет значение, что мы предоставляем в ключевом слове belongsTo?

А есть какие-нибудь инструменты для визуализации взаимосвязи между какими-либо классами в приложении Grails?

1 Ответ

3 голосов
/ 30 ноября 2011

belongsTo с несколькими классами часто подозрительно, так как это означает, что экземпляры будут в композиционных отношениях с несколькими другими объектами домена.По моему опыту, это полезно, только если вы знаете, что один всегда будет null, когда другой установлен (но все же, вы можете предпочесть, чтобы TagUser и TagPost извлекали класс Tag).Я бы посоветовал вам удалить один из belongsTo (возможно, Post).

В ваших Post и User классах у вас, вероятно, есть отношение hasMany.Достаточно создать отношения, и не нужно добавлять belongsTo в Tag.Единственное преимущество использования belongsTo состоит в том, что обновление или удаление User или Post будет каскадно и также сохранять Tags.

Если ваш вариант использования для Tag является обычным (например, теги)в stackoverflow) вы пытаетесь создать отношения «многие ко многим» (у одного пользователя много тегов, а у одного тега много пользователей. То же самое для публикации).Вы можете использовать принадлежность к отношениям «многие ко многим», чтобы указать, кому принадлежит отношение.Прочитайте документацию по многим ко многим , чтобы понять, как работают такие отношения.

Что касается вашего последнего вопроса, IntelliJ имеет встроенную функцию визуализации зависимостей классов домена.

...