gpt4 book ai didi

Java - 2 路 'Has A' 关系

转载 作者:太空狗 更新时间:2023-10-29 22:41:23 27 4
gpt4 key购买 nike

我刚刚开始了一个项目,让我的雇主成为一个管理软件。我有一个琐碎但可能很简单的查询,我似乎找不到任何相关信息。

在对象之间建立“具有”关系的两种方式是否谨慎/良好做法。例如,Client 对象“有一个”Site,然后 Site“有一个”Client,其中 Client 对象是“拥有”SiteClient?

public class Client {
Site site;
}

public class Site {
Client client;
}

这是否有任何令人反感的地方(没有双关语意),或者它很好吗?我目前正在为该项目创建一个模型 UML,这一直困扰着我。

最佳答案

Is there anything objectionable to this, or is it fine?

对此没有明确的答案。最佳答案是:这取决于您的应用程序的设计。

何时使用它

如果您的 Client 对象应该导航到 Site 对象,而您的 Site 对象应该导航到 Client对象,那么您代码中的当前示例就可以了。尽管如此,您可能仍需要一些方法来关联这些元素,可能是通过在其中一个类或两个类中添加一个额外的 id 字段。

如果碰巧您使用的框架可以帮助您自动绑定(bind)类,例如 Hibernate,那么维护循环引用对您来说不是问题。

什么时候不使用它

基本上,对于文本序列化,因为它会产生一个无限循环。正如Raibaz's answer中已经提到的,像 Jackson 这样的库在将 ClientSite 类序列化为 JSON 字符串1 时会陷入死循环。请注意,这在序列化为其他 String 数据时也有效,例如通过 XML 中的 JAX-WS Web 服务传递对象(更多信息:What happens to generic class in jax-ws webservice?)。

1 这可以使用属于特定库的注释 (@Something) 来解决,例如@JsonManagedReference@JsonBackReference 来自 Jackson library ,如@SimonAndréForsberg 所述,但此解决方案的缺点是您的类将与库紧密耦合。

关于Java - 2 路 'Has A' 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18149033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com