用Java编程时,总是需要根据DAO架构进行编码吗?如果是这样,使用它有什么好处?
我正在做一个有下面类图的项目。这有什么缺点?
实体类:
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;
}
和数据库类进行连接建立和销毁。
答案 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中你拥有了你需要的所有属性,在接口你只有方法声明,所有业务逻辑都驻留在服务类中。 因此,预计将在哪里完成哪些工作。因此,任何对项目都不熟悉的人都可以轻松理解项目的流程。