使用DAO模式

时间:2011-06-03 18:09:23

标签: java design-patterns dao dto

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

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

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

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

或者在网络应用程序中附加所有必要的DAO会不会很好?如果是这样,那么我必须为每个Web应用程序编写相同的DAO ode。

希望任何人都可以使用DAO模式为我提供此DB连接的明确路径。

2 个答案:

答案 0 :(得分:1)

一般而言,通过分离您的疑虑,您将朝着正确的方向前进。

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

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

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

您正在计划一个非常雄心勃勃的项目,因此利用现有框架来最小化重新创建轮子将让您专注于您的特定问题域。

答案 1 :(得分:0)

  • 使用JPA访问数据库。如果不可能,那么使用JdbcTemplate(Spring)
  • EntityManager(JPA)是一种DAO
  • DAO只在有意义的地方(例如使用EntityManager的复杂,可重用的逻辑)
  • 使用池连接/数据源
  • 通常只有在对象需要离开JVM时才需要DTO(例如远程EJB服务,Web服务......)
  • 将EJB用于容器管理的事务
  • 考虑网关模式(有状态会话bean和扩展持久化上下文,请参阅Adam Bien的“真实世界Java EE模式 - 重新思考最佳实践”)并返回附加实体。