1

我想在我的新项目中实现通用 DAO 和通用服务。我在网上看到了很多例子。

在开始之前,我想知道使用这种设计模式的优缺点。

任何人都可以告诉使用这种模式是否可取?

4

2 回答 2

1

当多个 DAO 类想要与数据库通信时,通用 DAO 设计模式就会出现(例如 CRUD(创建、读取、更新和删除)),如果没有这种设计模式,您最终将编写单独的代码来进行数据库调用(使用会话)为您的每个 DAO 类通常是一项乏味的工作,因为对于 DAO 类的每个新实现,您必须编写自己的代码来处理数据库。

以下是使用通用 DAO 的一些优点和缺点。

注意:下面给出的详细信息是我从对使用 DAO 模式的 SO Question Pros and Cons 的回答中学到的

优点

1 . 创建实际存储系统的一个很好的抽象层。

2 . 提供更面向对象的持久层视图。

3 . 在域类和代码之间提供一个清晰的分离,这些代码将从数据库执行数据访问。[使用 JDBC、ORM [如休眠] 或 JPA]

4 . 一旦你设置了通用的CRUD流,就可以为其他 DAO 重复相同的布局。

缺点

1 . 如果您手写 DAO,那么代码可能会变得乏味和重复,您必须使用代码生成器/模板和 ORM。

问 - 任何人都可以告诉使用这种模式是否可取?

A - 在观察了上述优点和缺点之后,我在我的应用程序中使用通用 DAO 作为抽象层,以 CRUD 条款与数据库进行通信,这实际上帮助我减少了大量重复代码来做其他 DAO 相同的事情。起初需要时间来获得习惯了以后使用 Generic DAO 会让你的生活变得轻松。

于 2015-11-19T04:46:34.497 回答
1

我认为,对 DAO 和通用 DAO 有不同的看法会更好。关于 Pros 的一些话(如果您使用 ORM,我的建议是有效的,例如 Hibernate,而不是普通的 JDBC)。

  1. 创建实际存储系统的一个很好的抽象层。

这是一个营销废话。在现实生活中,我们在各种 RDBMS(Oracle RDBMS -> PostgreSQL)之间迁移时遇到问题。不谈论存储系统类型的更改(例如 RDBMS -> NoSQL)。

  1. 提供更面向对象的持久层视图。

不!很难正确地做到这一点。大多数 DAO 实现都有几十种方法,例如

getSomething(String x, String y, String z);
getSomethingOther(String x, String z); 
  1. 在域类和代码之间提供一个清晰的分离,这些代码将从数据库执行数据访问。[使用 JDBC、ORM [如休眠] 或 JPA]。

可能是,但这种分离的用处被夸大了。

  1. 一旦你设置了通用的 CRUD 流,就可以为其他 DAO 重复相同的布局。

它是正确的。

于 2015-11-19T08:38:50.593 回答