Java对象中的循环引用是不是很糟糕?

时间:2014-06-06 07:03:35

标签: java

我最近正在处理一些代码。这是要点 -

class Student {
   private String name;
   private List<Performance> performances;
}

class Performance {
   private Student student;
   private List<Integer> perfData;
}

学生&amp;性能具有循环依赖性。这不好吗?我们如何在不失去查找学生所有表演的能力的情况下防止/打破这种情况,并将表现地图反馈给学生。

1 个答案:

答案 0 :(得分:1)

在做这些事情时,你应该经常问自己的问题是:在现实世界中,我的设计是否有意义?在有人跳进去纠正我之前,有些情况下设计没有映射到逻辑,有些情况下也会如此。

当我查看你的代码时,首先想到的是如何将东西存储在大学软件中。您需要了解有关学生的信息,每位学生的绩效评估以及许多其他相互关联的平台(电子邮件,注册课程等)。这意味着,对于给定的学生,有一些表演有一些数据。所以他们属于学生,所以你在那里做的很好,将学生与表演联系起来。我认为错误的是你可能在某个地方使用该表演,而你不应该将其映射回学生。没有更大的图片留下了解释的空间。

现在,你可以做些什么来解耦系统,如果我们想象一个更大的图片就是为学生分配一个id。

class Student {
   private String name;
   private String address;
   private String city;
   private String nationality;
   private Data dob;
   private long studentId;
} 

class Performance {
   private long studentId;
   private List<Integer> perfData;
}

class PerformanceManager{
    private List<Performance> performances;

    public List<Performance> getPerformanceForId(long id);
}

class MailItem{
    private String to;
    private String message;
    private long studentId;
}

class MailManager{
    private List<MailItem> mails;
    private List<MailItem> getMailForId(long id);
}

当然,上面的例子只是一个简化,但我们的想法是,彼此无关的系统(性能和邮件)通过id链接,而不是通过引用链接。