Java对象中的循环引用是否不好?
我最近在写一些代码。要点如下:Java对象中的循环引用是否不好?,java,Java,我最近在写一些代码。要点如下: class Student { private String name; private List<Performance> performances; } class Performance { private Student student; private List<Integer> perfData; } 班级学生{ 私有字符串名称; 私人名单表演; } 课堂表现{ 私立学生; 私有列表数据; } 学生
class Student {
private String name;
private List<Performance> performances;
}
class Performance {
private Student student;
private List<Integer> perfData;
}
班级学生{
私有字符串名称;
私人名单表演;
}
课堂表现{
私立学生;
私有列表数据;
}
学生与绩效之间存在循环依赖关系。这不好吗?我们如何防止/打破这种情况而不丧失查找学生所有表现的能力,并将表现映射回学生。在做这些事情时,你应该始终问自己的问题是:在现实世界中,我的设计有意义吗?在有人开始纠正我之前,有些情况下设计没有映射到逻辑,有些情况下它确实映射到逻辑 当我看到你的代码时,我首先想到的是大学软件中的东西是如何存储的。你需要有关于学生的信息、每个学生的成绩评估以及许多其他互联平台(电子邮件、注册课程等)。这意味着,对于一个给定的学生来说,有些表演有一些数据。因此,它们属于学生,因此,通过将学生与表演联系起来,你在那里所做的一切都是好的。我认为错误的是,你可能在某个你不应该使用的地方使用这种表现,并试图将其映射回学生。没有更大的图景就没有解释的余地 现在,如果我们想象一个更大的图景,你可以做什么来解耦系统,将一个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);
}
班级学生{
私有字符串名称;
私有字符串地址;
私人城市;
私人国籍;
私有数据dob;
私立长期学生;
}
课堂表现{
私立长期学生;
私有列表数据;
}
班级绩效经理{
私人名单表演;
公共列表getPerformanceForId(长id);
}
类邮件项{
私有字符串到;
私有字符串消息;
私立长期学生;
}
类邮件管理器{
私人名单邮件;
私有列表getMailForId(长id);
}
当然,上面的例子只是一个简单的例子,但其思想是相互无关的系统(性能和邮件)是通过id链接的,而不是通过引用链接的。就个人而言,
学生
不应该关心他们的性能,因为这是由性能
类维护的。也许某种形式的时间表
或绩效管理器
更适合保存绩效列表,它可以提供查询,以列出指定的学生
被分配到的绩效。也许,Performance
的实例应该有一个列表
的学生
?不,循环依赖本身并不坏,这只是一个建模透视图-例如,如果您想建模人与人之间的关系,其中一个人对象引用了其他人对象(自引用),那么循环/自反依赖是不可避免的,这是软件设计的问题。如果你想这样做,这是完全可以的。我在软件中看到过上百次这样的事情,我自己也做过。