java - 如何在 Java 中表示 1..n 关系

标签 java

假设我有两个类:一个用于乐队,一个用于 CD。我希望能够轻松访问一个 Band 中的所有 CD 并找到 CD 的 Band。

我的解决方案是有一个字段 Band在 CD 和 ArrayList<CD>带内。

但我认为这不是一个好的解决方案。有谁知道针对这种情况的更好设计?

最佳答案

我明白你为什么不喜欢这个解决方案了。

您只存储一次信息,但您必须更新两个类中的更改。

如果更改CDBand,则必须从旧的Band 中删除CD ,在CD中设置Band,然后将其添加到新的Band中。

这当然很复杂而且容易出错。

您的类没有简单的 getter/setter。相反,您必须在域类中实现大量逻辑以保持一致性。

当然,优点是您始终可以访问CDBand,反之亦然。这是一个权衡。例如,您是否应该使用 CDBand 作为其 equals 实现的一部分。

这是一个有趣的替代方案,在某些情况下可能是有利的:

仅将您的类 BandCD 用作简单的 POJO,并使用另一个类(即 MusicService)来解析关系:

class MusicService {
  Band getBand(CD cd);
  List<CD> getCDs(Band band);
  addCD(Band band, CD cd);
}
  • 优点:关注点分离、无状态服务
  • 缺点:代码较多

关于java - 如何在 Java 中表示 1..n 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510116/

相关文章:

java - 如何在 Java 中访问名称节点上的本地文件?

java - 黑莓参数化仅在源级别 1.5 时可用

java - 在 Java 中使用 ArrayList 的二维动态数组

java - Tomcat8.5和Openjdk11 NoClassDefFoundError : Could not initialize class org. apache.cxf.attachment.AttachmentUtil

Wildfly 服务器上的 Java Spring 项目无法访问 RESTful 服务

java - 为什么当我运行代码时 obj.start() 不运行?

java - 如何在 slick2D java 游戏库中播放声音和音乐?

java - Arraylists及其各种函数

java与Pascal应用程序通信是否可能

java - 如何删除 HttpServletRequest 参数(在 JSP 中)?