我目前正在参与的项目中,有这样的讨论,我想问问其他人对此的看法。
DAO模式是什么(根据维基百科):“在计算机软件中,数据访问对象(DAO)是一种对象,它为某种类型的数据库或持久性机制提供抽象接口,提供某些特定操作而不暴露数据库的详细信息。”
但是,使用ORM,这显然是ORM(例如Hibernate)的工作。它确切地为几乎任何类型的数据库提供了抽象接口。
回顾一下最近的几个项目,我们来看看DAO层。第一步始终是具有save(),findById(),findAll()方法的通用Hibernate DAO。对我来说,这只是代理Hibernate会话方法。
更进一步,我看到像这里建议的这样的接口:Hibernate中的通用DAO模式,这完全将DAO紧密地绑定到Hibernate的持久化方式(merge,criteria query)。该DAO不能与Hibernate以外的其他持久性机制一起使用。
因此,最终的想法是一个问题:对于这样的常见DAO设计,DAO模式带来了什么新东西?如果我想切换数据库引擎,我会在Hibernate级别上进行切换。那么,在ORM应用程序中使用DAO模式目前真的有任何好处吗?
让我们收集一些经验:
- 您有多少次看到DAO类层次结构与Hibernate(或其他ORM)紧密绑定,并且您对此有何看法?
- 您有多少个项目更改了持久性机制,以便通过DAO层获得了好处(即,您需要实现其他DAO层,因为通过切换db方言无法在ORM级别完成您的工作)?
- 您有多少个项目仅开发了大型DAO结构(每个域对象都有接口+类),并且从未真正使用过它们(即,您从未更改过基础DAO层次结构的实现)?
- 您认为没有DAO层的应用程序,只使用ORM会话提供的抽象是怎样的?
请分享您的经验。