|
锁定老贴子 主题:讨论:用DAO模式有什么好处?
该帖已经被评为良好帖
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2006-05-01
把常见的持久化操作CRUD封装在一个接口Persistence并用Hibernate实现不可以么,为什么非要多了DAO这么麻烦,相比上面的方案有什么好处么?
interface: PersistenceManager impl class: HibernatePersistenceManager (implements PersistenceManager) 然后其它业务类调用PersistenceManager来进行业务处理,这样不是很方便 看到appfuse的代码中: [code:1] public interface RoleDAO extends DAO { /** * Gets roles information based on login name. * @param rolename the current rolename * @return role populated role object */ public Role getRole(String rolename); /** * Gets a list of roles based on parameters passed in. * * @return List populated list of roles */ public List getRoles(Role role); /** * Saves a role's information * @param role the object to be saved */ public void saveRole(Role role); /** * Removes a role from the database by id * @param rolename the role's rolename */ public void removeRole(String rolename); } [/code:1] [code:1] public interface RoleManager { public void setRoleDAO(RoleDAO dao); public List getRoles(Role role); public Role getRole(String rolename); public void saveRole(Role role); public void removeRole(String rolename); } [/code:1] 在这里,RoleDAO和RoleManager不是就功能重复了么,如果按照上面的方案RoleManager直接调用PersistenceManager来处理不就可以了? 初学web架构设计,对于DAO还不了解,望赐教 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-05-01
可能是为了在dao不包含transaction,
而把transaction放到service层。 而service层可以组合不同的DAO。 |
|
| 返回顶楼 | |
|
最后更新时间:2006-05-07
在这种简单的情况下,可以像搂住所说的那样,把Dao和service合并到一起。在实际项目中可能会碰到那种业务非常复杂的情况,那样你就会体会到吧Dao和service分离的作用了。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-05-08
我也是觉得, 这是为了简化复杂系统的开发. 更细的再分出一层. 复杂的系统, 一个操作可能涉及好几个 table, 因此有必要再细分出一个与业务逻辑无关的数据库层, "与业务逻辑无关的数据库层" 是我乱起的名字, 嘻嘻. 新手请大家多指教
|
|
| 返回顶楼 | |
|
最后更新时间:2006-05-08
你这里的manager提供的服务无非就是role的CRUD 当然就会有这种疑问了。难道你没写过一个方法要操作好多次数据库,操作好多实体的情况么?
|
|
| 返回顶楼 | |
|
最后更新时间:2006-05-09
组合使用不同的dao
而且可以进行事务处理,统一提交、回滚等 |
|
| 返回顶楼 | |
|
最后更新时间:2006-05-12
DAO(Database Access Object),顾名思义就是数据库访问接口,也就是和数据库打交道操作对象.而这些操作往往可以从系统的业务逻辑中独立出来,从而使系统中的数据库操作变得统一和简单化(相对于数据库具体操作混合业务逻辑操作),而且也可以使得系统在和数据库交互出错时,更快的定位问题.
总而言之,我觉得,使用DAO的目的是,将数据控制层和业务逻辑控制层分离开,这样不仅更有利于项目开发时的功能划分和工作分配(负责数据层的人员只注重数据操作,负责业务逻辑控制的开发人员只关注业务逻辑,使得各人的分工简化明晰),在项目维护时也更容易定位和解决问题. |
|
| 返回顶楼 | |
|
最后更新时间:2006-08-02
简单的说,那个东西就是一个插座,你只要更给录音机供电,他都是用同样的方法去产生声音的,不是你用电厂给你的电和用自己发的电就不一样了。
换句话说,就是,换了产生数据的实现,不用改逻辑,照样可以使用,这个应该是接口的一大好处吧!我理解的不好,请大家指教! |
|
| 返回顶楼 | |
|
最后更新时间:2006-08-08
yangwudong 写道 简单的说,那个东西就是一个插座,你只要更给录音机供电,他都是用同样的方法去产生声音的,不是你用电厂给你的电和用自己发的电就不一样了。
换句话说,就是,换了产生数据的实现,不用改逻辑,照样可以使用,这个应该是接口的一大好处吧!我理解的不好,请大家指教! 但產生數據的實現會影響DAO 的設計, 例如直接用JDBC或IBatis 實現的DAO, 比用Hibernate 或JDO 的, 前者粒度會比較細, 後者會比較粗, 若設計不當, 反而會浪費了Hibernate 或JDO 的強大功能 |
|
| 返回顶楼 | |
|
最后更新时间:2006-08-14
就像独立的显卡,当然主板也可以集成...
|
|
| 返回顶楼 | |













