Следует ли избегать двусторонних отношений? - PullRequest
1 голос
/ 01 апреля 2012

В моем Java-приложении у меня есть одна сущность, у некоторых из них может быть ссылка на другую.

Скажи, что у меня есть сущность:

class Work{
 User manager;
}

class User{
  List works;
}

Тогда, если я создам один экземпляр Work, он будет содержать ссылку на одного пользователя, который будет содержать ссылку на Work.

Я боюсь, что будут бесконечные гнезда.

Так мне интересно, стоит ли этого избегать или нет?

Ответы [ 3 ]

2 голосов
/ 01 апреля 2012

Нет проблем с этими двунаправленными отношениями.Вы, кажется, беспокоитесь о каком-то цикле, вызванном обходом User до Work и обратно и т. Д.

Спросите себя, требуется ли вам получить Work s с User ИUser дано Work.Если это так, то имеет смысл хранить двунаправленные ссылки.

1 голос
/ 01 апреля 2012

Нет проблем с этим видом двусторонней ссылки.Единственная ситуация, которую я могу придумать, где вы можете попасть в «бесконечное вложение», это если код в обоих классах попал во взаимный вызов методов, например

class Work {
  User manager;

  public void doWorkStuff() {
    manager.doUserStuff() {
  }  
}

class User {
  Work works;

  public void doUserStuff() {
    works.doWorkStuff();
  }
}
0 голосов
/ 01 апреля 2012

Этот вид сценария зависит от дизайна. Какие отношения существуют между Работой и Пользователем? 1: m, m: 1 или m: n? Основываясь на этом результате, мы должны соответствующим образом спроектировать класс.

По вашему вопросу я вижу 1 пользователя может иметь несколько работ (Список работ), но 1 работа может иметь только 1 пользователя. Следовательно, пользователь в классе Work будет сущностью, определяющей владельца работы. Следовательно, назовите его соответственно, т.е. clas Work {владелец частного пользователя; ....}

...