【问题标题】:What is the necessity of DAO ArchitectureDAO架构的必要性是什么
【发布时间】:2010-11-05 14:28:16
【问题描述】:
  1. 在使用 Java 编程时,是否总是需要根据 DAO 架构进行编码?如果是的话,使用它有什么好处?

  2. 我正在做一个具有如下类图的项目。这有什么缺点?

实体类:

private void fillSONumber() {
    try {
        ZnAlSalesOrder o = new ZnAlSalesOrder();
        ArrayList a = o.getPendingSalesOrderIDs();
        for (int i = 0; i < a.size(); i++) {
            cmbSoNo.addItem(a.get(i));
        }
        o.close();
    } catch (Terminated ex) {

    }
}

EntityTable 类示例:

public ResultSet select(String fields, String selection) {
    db = new Database();
    db.select("SELECT " + fields + " FROM " + name + " WHERE " + selection);
    return rs = db.rs;
}

和数据库类做连接的建立和销毁。

【问题讨论】:

  • 你是指Java还是ASP.NET?
  • 在公共方法周围传递java.sql.ResultSet 是一种不好的做法。
  • @Matt Ball,好问题,但我认为是 java:见他之前的问题:stackoverflow.com/questions/4106606/…

标签: java asp.net design-patterns dao


【解决方案1】:

用 Java 编程总是 必须根据 DAO 编码 建筑学?如果是的话是什么 使用它有什么好处?

DAO 是一种常见的最佳实践,过去一直有效,而且很干净。优点是当新开发人员开始项目时,他很可能已经熟悉此设计。对任何模式做的最重要的事情就是保持它解耦。这非常重要,因为稍后您应该能够用其他一些实现替换 DAO,而不会影响其余代码。

我正在做一个有类的项目 如下图。什么是 这样做有什么坏处?

对我来说这是有道理的。我的问题是,你是唯一使用它的人吗?如果是这样,那么您是否需要所有这些接口?如果您将实现传递给其他人,接口很重要。就像一个 API。稍后它可能会更改为另一个子类。但是,如果您可以完全控制您的设计,我认为您不应该白白创建臃肿的界面。

最后,除了o.close();,您的代码看起来很好,为什么客户端需要调用close?每个 DAO 函数都应该足够智能以打开和关闭连接。数据库对您的 bean 应该是透明的。我认为不需要关闭。

【讨论】:

  • 我想迁移到 DAO 对我来说更好
【解决方案2】:

DAO 模式的目的是将您尝试访问的数据与其存储方式分开。

例如,您可以创建一个 DAO,指定一些方法,然后针对 MySQL 实施这些方法。如果您决定需要迁移到 MSSQL 或 Oracle,您只需更改实现,而不需要更改可在代码中多个不同位置使用的接口。

没有必要这样做,但让未来的更改更容易并保持代码解耦可能是个好主意。

至于您的设计,基本布局很好,但我建议您不要使用像您这样的通用选择方法。您基本上只是在创建另一个抽象层,其中可能会出现问题而没有任何额外的好处。

它适用于简单的查询,但如果您需要进行任何连接,您很快就会得到一大堆用于不同连接类型的方法。

最好只为需要访问的每种数据类型编写 SQL,并创建一个返回所需数据类型的方法。这减少了您的耦合,并允许您在需要时更改您的实现。

【讨论】:

  • 哈,我想你和我说的基本一样。
  • 差不多,我知道我应该点击加载新答案按钮。
  • 你的两个答案都很好。他们解释得很好。
【解决方案3】:

数据访问对象 (DAO) 表示 CRUD(创建、读取、更新和删除)方法。您的 EntityTable 类示例更适合于 Gateway 对象,该对象封装了针对表中多行数据的操作。因此,对于这两种类型的对象,这种方法的一些优点和缺点:

DAO 提供了一种方便的方法来抽象保存数据,因此您无需区分插入和更新。

网关允许您构建专门的查询。例如,假设您有一个搜索结果,您需要在其中对数据进行分页。除了任何条件之外,网关方法可能会将开始行和结束行作为参数,并返回仅包含该窗口的记录集。

【讨论】:

    【解决方案4】:

    DAO 就像一个协议或规则,以某种方式存储您的数据。在 DAO 中,我们有四个 Java 类,如 Connection、Normal Bean、Interface 和 Service Classes。这些所有类都有各自的工作。就像在 Connection 类中您为数据库连接建立连接一样,在 Normal Bean 中您拥有所需的所有属性,在接口中您只有方法声明,所有业务逻辑都驻留在服务类中. 所以预先定义了在哪里完成什么工作。所以任何刚接触项目的人都可以很容易地了解项目的流程。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 2013-01-21
      相关资源
      最近更新 更多