应该避免双向关系吗?

时间:2012-04-01 12:21:04

标签: java reference design-patterns

在我的java应用程序中,我有一些实体,其中一些可能引用另一个实体。

说我有一个实体:

class Work{
 User manager;
}

class User{
  List works;
}

然后,如果我创建一个Work实例,它将保留一个将保存Work的引用的用户的引用。

我担心会有无休止的关系。

所以我想知道这是否应该避免?

3 个答案:

答案 0 :(得分:2)

这种双向关系没有问题。您似乎担心因遍历UserWork而又会再次返回等引起的某种循环。

问问自己是否需要Work获得UserUser获得Work。如果是这种情况,则存储双向引用是有意义的。

答案 1 :(得分:1)

这种双向引用没有问题。 我能想到的唯一可以进入“无限嵌套”的情况是,如果两个类中的代码相互调用方法,例如。

class Work {
  User manager;

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

class User {
  Work works;

  public void doUserStuff() {
    works.doWorkStuff();
  }
}

答案 2 :(得分:0)

这种情况取决于设计。工作和用户分享什么样的关系?它是1:m,m:1还是m:n?基于这个结果,我们应该相应地设计这个类。

根据您的问题,我可以看到1个用户可以拥有多个作品(作品列表)但是1个作品只能有1个用户。因此,Work类中的用户将是确定工作所有者的实体。因此,请相应地命名,即clas Work {私人用户所有者; ....}