每个“容器”类一个 DAO 还是每个表一个 DAO?

Posted

技术标签:

【中文标题】每个“容器”类一个 DAO 还是每个表一个 DAO?【英文标题】:One DAO per 'container' class or one DAO per table? 【发布时间】:2015-10-26 04:56:00 【问题描述】:

我有一个“容器”类,其字段包含在多个数据库表中,并且我使用 DAO 模式来访问数据。

问题是,我应该为这个“容器”类创建一个 DAO,还是每个表都有一个 DAO 并合并它们的数据更好?

【问题讨论】:

【参考方案1】:

您应该根据您的应用程序需求设计您的 DAO,而不是您的数据库的布局。从一个 DAO 开始,如果它变得太大,则以对您的代码有意义的方式将其重构为多个 DAO。

DAO 的全部意义在于隐藏应用程序中的任何数据库概念(如表)。您的应用程序应该将其视为具有一些有用方法的服务。

例如,如果您的应用程序需要一些来自 Users 表和 EmailAddresses 表的用户数据,您的应用程序代码不应该协调两个 DAO - 它应该调用一个 DAO 方法 getUserDetails() 并且 DAO 将隐藏需要调用多个表的事实。

我推荐您问题中的第一个选项,但我不会将自己限制在“每个容器类一个 DAO”的规则中。

【讨论】:

以上是关于每个“容器”类一个 DAO 还是每个表一个 DAO?的主要内容,如果未能解决你的问题,请参考以下文章

JPA:所有实体一个 DAO,还是每个实体一个 DAO?

每个线程一个 DAO 还是线程安全 DAO?

使用 DAO 模式

java web开发时dao和model层里写啥内容

DAO 模式 - 它提供业务对象还是纯数据?

为每层表结构获取 DAO