面向对象设计:冗余可以显示"属于"关系?

时间:2014-07-20 03:20:24

标签: oop

如果我有一个名为Parent的类并且它将子项存储在列表中,那么通过将Children存储在此列表中,只需确定Parent拥有这些子项并且子项属于父项就足够了。但是我觉得在Child类定义中包含Parent字段会更舒服。我认为这可能对JPA这样的事情来说是必要的;除此之外,这个设计选择是好的还有一个原因吗?或者它是不是很糟糕,因为它不是绝对必要的?

3 个答案:

答案 0 :(得分:2)

您所指的是单链表或树与双向链表或树之间的区别。它们是两种不同的数据结构,有自己的用途。两者都不比另一个更好,每个都是"正确的"对于需要的情况。

换句话说,对于只需要单链接结构的情况,你不应该使用双重链接结构,反之亦然。

单链接结构倾向于使用更少的内存并且需要更少的工作来更新,并且如果您仅以一种方式遍历它,则不需要双重链接结构。但是,如果您打算双向遍历,则使用双向链接结构可能会更快。

答案 1 :(得分:0)

首先,我认为这适用于某些通用的OO语言,例如Java。我不知道这个问题是否有一个通用的答案,因为这取决于是否有额外的关联实际上会有所帮助。如果您总是通过父级引用子对象,例如parentObj.getChildren().get(1),那么我不明白为什么它是必要的。记住更新/帐户的另外一件事可能会失去同步。

当然可能存在一些情况,根据您访问事物的方式,在Child类中具有此父属性是完全可以接受的。

OOD / A这种方式很棘手 - 我们不想创建太多关联,因为这会导致紧密耦合和代码容易中断,但我们并不想完全避免关联会击败OOP的大部分效用。

答案 2 :(得分:0)

两个选择都很好。有时,当您需要编写核心或业务层,某种任务时,需要您在双方都有参考,但在其他方面您只需要一个。我建议您考虑一下您的业务需求,并选择填写会议的选项。

要想到的另一个提示是:某些ORM库可能会强制您在双方使用引用,特别是如果您使用业务实体核心和数据访问层。