- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我刚刚开始了一个项目,让我的雇主成为一个管理软件。我有一个琐碎但可能很简单的查询,我似乎找不到任何相关信息。
在对象之间建立“具有”关系的两种方式是否谨慎/良好做法。例如,Client
对象“有一个”Site
,然后 Site
“有一个”Client
,其中 Client
对象是“拥有”Site
của Client
?
lớp công khai Client {
Site site;
}
public class Site {
Client client;
}
这是否有任何令人反感的地方(没有双关语意),或者它很好吗?我目前正在为该项目创建一个模型 UML,这一直困扰着我。
câu trả lời hay nhất
Is there anything objectionable to this, or is it fine?
对此没有明确的答案。最佳答案是:这取决于您的应用程序的设计。
何时使用它
如果您的 Client
对象应该导航到 Site
对象,而您的 Site
对象应该导航到 Client
对象,那么您代码中的当前示例就可以了。尽管如此,您可能仍需要一些方法来关联这些元素,可能是通过在其中一个类或两个类中添加一个额外的 id 字段。
如果碰巧您使用的框架可以帮助您自动绑定(bind)类,例如 Hibernate,那么维护循环引用对您来说不是问题。
什么时候不使用它
基本上,对于文本序列化,因为它会产生一个无限循环。正如Raibaz's answer中已经提到的,像 Jackson 这样的库在将 Client
hoặc Site
类序列化为 JSON 字符串1 时会陷入死循环。请注意,这在序列化为其他 Sợi dây
数据时也有效,例如通过 XML 中的 JAX-WS Web 服务传递对象(更多信息:What happens to generic class in jax-ws webservice?)。
1 这可以使用属于特定库的注释 (@Something
) 来解决,例如@JsonManagedReference
Và @JsonBackReference
từ Jackson library ,如@SimonAndréForsberg 所述,但此解决方案的缺点是您的类将与库紧密耦合。
关于Java - 2 路 'Has A' 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18149033/
Tôi là một lập trình viên xuất sắc, rất giỏi!