处理集合的数据库DAO(Java)

时间:2013-09-18 16:58:26

标签: java database uml dao

我似乎无法找到正确的措辞来搜索网络并获得正确的答案。所以,每当我有一个包含其他对象集合的对象时,我就会陷入困境,想出如何设计关系。

例如,一个非常基本的例子是...... enter image description here

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

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

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

2 个答案:

答案 0 :(得分:1)

您不必在DAO上遵循实体关系架构。

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

没有关于此的规则,而是你自己的判断力。

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

我对你的建议是更多地考虑在遵循限制性规则的情况下进行理解

答案 1 :(得分:1)

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

正如@Thieson暗示的那样,你必须问问自己为什么要打扰。如果有真正想要在它们之间继承和重用的功能,那么很好。但否则可能没有意义。我见过很多具有大量对象的系统,其中各种DAO对象之间没有直接的层次结构(例如broadleaf)。

你可能会在这里得到几个答案,告诉你简单地做任何最有意义的事情,这绝对是个好建议。