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

处理集合的数据库DAO(Java),java,database,uml,dao,Java,Database,Uml,Dao,我似乎找不到正确的措辞来搜索网络并得到正确的答案。所以,每当我有一个对象,它有一个其他对象的集合,我就会陷入如何设计关系的困境 例如,一个非常基本的例子是。。 所以,我有一个人可以有很多地址。我知道让PersonDAO也创建地址并将它们放在Person对象中是不正确的,那么我如何为Person对象创建一个方法(listAll()),但让它们也返回所有地址呢 我希望这是有意义的,请让我知道,如果我需要澄清 另外,我在网上能找到的唯一一件看起来比较准确的事情是使用CollectionsDAO,但我

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

例如,一个非常基本的例子是。。

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

我希望这是有意义的,请让我知道,如果我需要澄清


另外,我在网上能找到的唯一一件看起来比较准确的事情是使用CollectionsDAO,但我不确定这是怎么回事,所以我把它用红色写了进去。

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

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

关于这一点没有规定,但你自己的判断力

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


我给你的建议是,如果遵循限制性规则的话,就更需要考虑是否有意义了。一种解决方案是让PersonDAO调用AddressDAO来获取地址,并将它们放在它返回的Person对象中。这将包含在一个单独的listFull()方法或类似的方法中。如果“地址”是“Person”的一部分,我不知道PersonDAO对象也知道如何用地址记录填充Person实例在概念上是错误的。让PersonDAO调用AddressDAO来执行实际的数据访问似乎可以很好地分离关注点(每个DAO访问自己的表,并委托给其他DAO,在其他DAO中需要获取更多数据以返回更复杂的结果)

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


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

搜索关系-
一对多
多对一
一对一
多对多
。谢谢,这正是我想要的。“多对多刀”导致了我以前找不到的大量例子。这两个答案都很好,我很想检查第一个答案,因为它是第一个,而这两个答案几乎相同。然而,我喜欢您的回答特别建议在PersonDAO中使用AddressDAO来保持关注点的分离。我不知道为什么我没有想到这一点,但我认为这会很好,因为我确实希望能够列出他们自己的地址,但也能列出有地址填充的人。我试图达到的关键点是,我仍然具有良好的内聚力,但仍能获得期望的结果。