【发布时间】:2016-02-21 01:42:54
【问题描述】:
我想在我的新项目中实现通用 DAO 和通用服务。我在网上看过很多例子。
在开始之前,我想知道使用这种设计模式的优缺点。
谁能告诉我使用这种模式是否可取?
【问题讨论】:
标签: spring hibernate generics genericdao
我想在我的新项目中实现通用 DAO 和通用服务。我在网上看过很多例子。
在开始之前,我想知道使用这种设计模式的优缺点。
谁能告诉我使用这种模式是否可取?
【问题讨论】:
标签: spring hibernate generics genericdao
我认为,对 DAO 和通用 DAO 有不同的看法会更好。关于 Pros 的一些话(如果您使用 ORM,我的建议是有效的,例如 Hibernate,而不是普通的 JDBC)。
- 为实际存储系统创建一个很好的抽象层。
这是一个营销废话。在现实生活中,我们在各种 RDBMS(Oracle RDBMS -> PostgreSQL)之间迁移时遇到问题。不谈论存储系统类型的更改(例如 RDBMS -> NoSQL)。
- 提供更面向对象的持久层视图。
不!很难正确地做到这一点。大多数 DAO 实现都有几十种方法,例如
getSomething(String x, String y, String z);
getSomethingOther(String x, String z);
- 在域类和执行数据库数据访问的代码之间提供清晰的分离。[使用 JDBC、ORM[类似 休眠] 或 JPA]。
可能是,但这种分离的用处被夸大了。
- 一旦您设置了通用 CRUD 流,就可以为其他 DAO 重复相同的布局。
没错。
【讨论】:
当一个以上的 DAO 类想要与数据库通信时,通用 DAO 设计模式就会出现(例如 CRUD(Create,Read ,Update and Delete)),如果没有这种设计模式,您最终将编写单独的代码为每个 DAO 类进行数据库调用(使用会话),这通常是一项乏味的工作,因为对于 DAO 类的每个新实现,您都必须编写自己的代码来处理数据库。
以下是使用通用 DAO 的一些优点和缺点。
注意:下面给出的详细信息是我从对 SO Question Pros and Cons of the use of DAO pattern 的回答中学到的知识
优点
1。创建实际存储系统的一个很好的抽象层。
2。提供更面向对象的持久层视图。
3。在域类和代码之间提供清晰的分离 将从数据库执行数据访问。[使用 JDBC,ORM [like 休眠] 或 JPA]
4。一旦你设置了通用的 CRUD 流程,就可以使用相同的布局 对其他 DAO 重复。
缺点
1。如果您手写 DAO,那么代码可能会变得乏味和重复,您必须使用代码生成器/模板和 ORM。
Q - 谁能告诉我使用这种模式是否可取?
A- 在观察了上述优点和缺点之后,我在我的应用程序中使用 Generic DAO 作为抽象层,以根据 CRUD 与数据库进行通信,这实际上帮助我减少了大量重复代码来做其他相同的事情DAOs。起初需要时间来适应它,之后使用通用 DAO 会让你的生活变得轻松。
【讨论】:
public T persist(T entity) 接受域对象并执行 session.saveOrUpdate(entity) ,假设我在这里更改了一些逻辑,只需要确保更改是否反映在域对象中,并且将反映在所有域对象中,就像使用 java 泛型一样。