DAO架构的必要性是什么?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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