【问题标题】:Multiple DAO's vs One DAO with configuration file多个 DAO 与一个带有配置文件的 DAO
【发布时间】:2011-11-29 17:42:26
【问题描述】:

我目前正在为应用程序创建数据访问层。此应用程序最初将连接到 Oracle 数据库,但稍后也会连接到 DB2 数据库。

为了连接到数据库,我将使用 JDBC。这个时候我正在考虑我的选择。在我看来,我有两个(主要)选项。

1) 创建一个支持多个 DAO 工厂的设计,每个工厂都实例化特定于其数据库的 DAO。最初,这个设计将只有一个工厂。稍后它将通过第二个工厂和 DAO 类进行扩展。

2) 创建一个 DAO 工厂,为不同的模型实例化多个 DAO。这个 DAO 工厂基于配置文件构建 DAO,其中包含 JDBC 驱动程序路径和连接 url。

我很想选择第二个选项,这似乎消除了 DAO 中相当多的代码重复。谁能给出这两种方法的优缺点?

当您在使用 JDBC 时并不真正需要时,为什么要选择多个 DAO 工厂(抽象工厂模式)?

【问题讨论】:

  • 你考虑过使用 Spring 和 Hibernate 吗?
  • 是的,决定(外部)不使用 Spring 或 ORM 解决方案。我只剩下这个了。
  • 您可以直接使用 Spring DI 部分,而无需通过 Spring-JDBC 或 ORM。你可以选择你想在 Spring 中使用的东西——它是一个包含许多模块的非常丰富的框架。我宁愿教育决策者编写干净的模块化代码的好处,而不是编写一个本土的配置解析和 DI 系统。

标签: java database dao


【解决方案1】:

我相信SpringGuice 对您来说是最好和最干净的选择,您可以在其中选择适当的DAO 实现并将其注入DAO 消费者层。 Spring 还将使您能够使用 Spring-JDBC 来处理大部分样板代码,从而使您的 DAO Impl 易于管理和编码。您还可以将 ORM 与 Spring 一起使用。

【讨论】:

  • 那确实会让我的工作轻松很多。不幸的是,如果不经过多层管理器,我就不允许使用其他库。我现在宁愿不这样做。感谢您对 Guice 的建议,我还不知道,听起来不错。
【解决方案2】:

考虑到您不能使用 Spring(即使它可以使您免于大量编码),我会说第二个变体更适合您,因为您将自己实现依赖管理 1依赖(单个 DAO 工厂)总是比 2 容易。

不过,如果你认为两个数据库的 DAO 一起使用的地方不多,那么将它们分成 2 个工厂将具有更好的结构意义,并且更干净。但是,如果您期望,几乎每个使用 DAO 的类都需要两个世界(Oracle + DB2),然后再次坚持使用第二个变体。

无论如何,请尝试再次考虑依赖注入框架的使用,因为无论如何您都将自己实现所有工厂。

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 2012-03-15
    • 2011-01-18
    • 2013-07-22
    • 2016-12-04
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多