DAO架构的必要性是什么?

时间:2010-11-05 14:28:16

标签: java asp.net design-patterns dao

  1. 用Java编程时,总是需要根据DAO架构进行编码吗?如果是这样,使用它有什么好处?

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

  3. alt text

    实体类:

    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;
    }
    

    和数据库类进行连接建立和销毁。

4 个答案:

答案 0 :(得分:4)

  

用Java编程总是如此   根据DAO编码所必需的   建筑?如果是这样的话   使用它的好处?

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

  

我正在做一个有课程的项目   图如下。什么是   这个缺点?

对我而言有意义。我的问题是,你是唯一使用它的人。如果是这样,那么你需要所有这些接口吗?如果要将实现传递给其他人,则接口非常重要。像API一样。后来它可能会改为另一个子类。但是,如果您完全控制您的设计,我认为您不应该为任何东西创建膨胀的接口。

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

答案 1 :(得分:2)

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

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

没有必要这样做,但是将未来的更改更容易并保持代码分离是一个好主意。

至于你的设计,基本布局很好,但我建议不要像你那样使用泛型选择方法。你基本上只是创造了另一层抽象,在这种情况下出现问题而没有任何额外的好处。

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

DAO就像一个协议或规则,随后以某种方式存储您的数据。在DAO中,我们有四个Java类,如Connection,Normal Bean,Interface和Service Classes。这些所有类都有自己独立的工作。在Connection类中,你建立了数据库连接的连接,在Normal Bean中你拥有了你需要的所有属性,在接口你只有方法声明,所有业务逻辑都驻留在服务类中。 因此,预计将在哪里完成哪些工作。因此,任何对项目都不熟悉的人都可以轻松理解项目的流程。