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

trn*_*snt 6 java

假设我有两门课:一门乐队,一门 CD。我希望能够轻松访问一个乐队的所有 CD 并找到一张 CD 的乐队。

我的解决方案是Band在 CD 中设置一个字段,ArrayList<CD>在 Band 中设置一个字段。

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

Jon*_*her 4

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

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

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

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

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

当然,优点是您始终拥有可访问的内容BandCD反之亦然。这是一个权衡。例如,如果您使用 aCD作为Bandequals实现的一部分,那么这是必要的。

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

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

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