使用 DAO 模式

Posted

技术标签:

【中文标题】使用 DAO 模式【英文标题】:Using DAO pattern 【发布时间】:2011-09-08 00:38:49 【问题描述】:

我正在尝试在我的多个 Web 应用项目中。我有三个不同的 Web 应用程序,它们共享两个不同的数据库。每个数据库都有许多表。

现在我想知道如何使用最佳实践使我的程序模块化。我正在考虑制作:

DAO 项目,每个数据库有两个工厂类,每个表的 DAO 接口和每个表的 DTO。 然后在每个 Web 应用程序项目中,我计划为 DAO 接口和必要的实用程序类编写实现代码以获取和关闭连接。

这种方法好吗?如果我要交付任何一个项目,我遇到的疑问/问题是这种设计,我也必须交付 DAO 项目,但这将包含有关其他数据库的不必要信息。

或者将所有必要的 DAO 附加到 Web 应用程序本身会更好吗?如果是这样,那么我必须为每个 Web 应用程序编写相同的 DAO ode。

希望任何人都可以为我提供此数据库连接的清晰路径。

【问题讨论】:

【参考方案1】:

一般来说,通过分离您的关注点,您会朝着正确的方向前进。

您提到多个网络应用程序依赖于两个数据库。每个 Web 应用程序都依赖这两个数据库吗?如果是这样,我会考虑创建一个 DAO 项目来封装所有数据访问逻辑。

如果更多的是混合搭配(web 应用 a 使用 db a,web 应用 b 使用 db b,web 应用 c 使用 a 和 b),我会考虑有两个 DAO 项目,每个数据库一个,除非有很多组合逻辑 - 也就是说,当一个应用程序使用两个数据库时,它会在它们之间进行连接[是的,我有这样做的项目]。

我还建议查看对象/关系映射 (ORM) 框架,例如 Hibernate 和/或依赖注入框架,例如 Spring,它可以帮助简化分离各个项目的过程,然后一起使用它们。

您显然正在计划一个雄心勃勃的项目,因此利用现有框架最大限度地减少重新创建***将使您专注于您的特定问题领域。

【讨论】:

【参考方案2】: 使用 JPA 访问数据库。如果不可能,请使用 JdbcTemplate (Spring) EntityManager (JPA) 是一种 DAO DAO 仅适用于有意义的情况(例如,使用 EntityManager 的复杂、可重用逻辑) 使用池连接/数据源 通常仅当您的对象需要离开 JVM 时才需要 DTO(例如远程 EJB 服务、Web 服务...) 将 EJB 用于容器管理的事务 考虑网关模式(有状态会话 bean 和扩展的持久性上下文,请参阅 Adam Bien 的“Real World Java EE Patterns – Rethinking Best Practices”)并返回附加的实体。

【讨论】:

以上是关于使用 DAO 模式的主要内容,如果未能解决你的问题,请参考以下文章

使用 DAO 模式

javaWeb_JDBC_dao模式设计

DAO模式(单表)

Android - 将 Dao 模式与 contentProvider 一起使用

将 DAO 模式与 ORM 系统一起使用是不是有意义? [关闭]

为什么在Dao设计模式或其他设计模式中使用接口