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

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

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

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

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

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

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

【问题讨论】:

    标签: java design-patterns dao dto


    【解决方案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”)并返回附加的实体。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 2013-04-19
        • 2012-04-14
        相关资源
        最近更新 更多