代码之家  ›  专栏  ›  技术社区  ›  Casey

DAO设计模式及其在多个表中的应用

  •  18
  • Casey  · 技术社区  · 16 年前

    我在寻找关于 Data Access Object 设计模式并在必须跨多个表访问数据时使用它。这种模式似乎在处理来自多个表的数据时不太有用,因为每个表都有一个DAO和一个表示单行的数据传输对象(DTO)。我在考虑创建一个复合DAO和相应的DTO,它将返回的结果,比如在两个表上执行连接。通过这种方式,我可以使用SQL来获取所有数据,而不是首先使用一个DAO从一个表中获取数据,然后使用第二个DAO从第二个表中获取数据,然后用Java将它们组合在一起。

    2 回复  |  直到 16 年前
        1
  •  15
  •   pkananen    16 年前

    我同意你的做法。我的dao倾向于更多地在对象级别对齐,而不是从DB表的角度对齐。我可以通过一个DAO管理多个对象,但它们很可能是密切相关的。没有理由不让SQL访问一个DAO中的两个表。

        2
  •  5
  •   Nazar Merza    13 年前

    理想情况下,如何将数据存储在数据库中,然后如何访问它们,应该从域模型中域实体之间的关系的性质派生出来。也就是说,关系模型应该遵循域模型。例如,如果您有两个实体,例如User和Address。

    情景1 :地址从不单独访问,它们始终是用户的属性。 在本例中,Address是一个值对象,User是一个实体,并且有关于如何存储此关系的指南。一种方法是将Address的Address属性和User的属性一起存储在一个表中。在这种情况下,UserDao将处理这两个对象。

    情景2 :地址可以与用户相关联,也可以独立于实体。

    例如,如果您的域模型被正确定义,并且您清楚地知道您拥有的实体的类型以及它们之间的关系,那么您的持久性(关系表及其关系、dao等)将作为您在域模型中拥有的东西的非常合乎逻辑的结果而发展。

    换句话说,如果您花一些时间研究您的模型,您将能够跟踪您的问题,以确定如何将dao组织到域模型中的某个位置。如果您能在域模型中清楚地定义对象的类型和它们之间关系的性质,它将帮助您解决DAL层中的问题。

    推荐文章