0

我似乎找不到正确的措辞来搜索网络并得到正确的答案。因此,每次我有一个包含其他对象集合的对象时,我都会陷入弄清楚如何设计关系的困境。

例如,一个非常基本的例子是.. 在此处输入图像描述

所以,我有一个可以有很多地址的人。我知道让 PersonDAO 也创建地址并将它们放在 Person 对象中是不正确的,那么我将如何为 Person 对象使用一种方法 (listAll()) 但让它们也返回所有地址?

我希望这是有道理的,如果我需要澄清,请告诉我。

此外,我能在网上找到的唯一看起来有点准确的东西是使用 CollectionsDAO,但我不确定它是如何工作的,所以我把它用红色扔在那里。

4

2 回答 2

1

你不必在你的 DAO 上遵循你的实体关系模式。

您可以简单地添加一个名为 listAllWithAddress 的方法,例如,在 PersonDAO 中,或者创建一个名为 PersonAddressDAO 的单独 DAO 来表示它们的关系。

对此没有任何规则,但你自己的判断力。

不管您对不添加该方法的评论,我都会在 PersonDAO 中添加该方法,因为无论如何它都会返回给我 Person 实体,即使地址已填充。

我对你的建议是更多地担心是否有意义,而不是遵循限制性规则

于 2013-09-18T17:12:56.200 回答
1

一种解决方案是让 PersonDAO 调用 AddressDAO 以获取地址并将它们放入它返回的 Person 对象中。这将进入一个单独的 listFull() 方法或类似的东西。如果“地址”是“人员”的一部分,我不知道 PersonDAO 对象也知道如何用地址记录填充 Person 实例在概念上是错误的。并且让 PersonDAO 调用 AddressDAO 来进行实际的数据访问似乎提供了良好的关注点分离(每个 DAO 访问它自己的表并委托给需要获取更多数据以返回更复杂结果的其他 DAO)。

正如@Thieson 所暗示的那样,您必须问自己为什么要费心去推导。如果您确实希望在它们之间继承和重用某些功能,那很好。但否则可能没有意义。我见过许多具有大量对象的系统,其中各种 DAO 对象(例如阔叶树)之间没有直接的层次结构。

您可能会在这里得到几个答案,告诉您只需做最有意义的事情,这绝对是个好建议。

于 2013-09-18T17:24:55.397 回答