论坛首页 Java版 DAO

讨论:用DAO模式有什么好处?

浏览 37234 次
该帖已经被评为良好帖
作者 正文
最后更新时间: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还不了解,望赐教
   
最后更新时间:2006-05-01
可能是为了在dao不包含transaction,
而把transaction放到service层。
而service层可以组合不同的DAO。
   
0 请登录后投票
最后更新时间:2006-05-07
在这种简单的情况下,可以像搂住所说的那样,把Dao和service合并到一起。在实际项目中可能会碰到那种业务非常复杂的情况,那样你就会体会到吧Dao和service分离的作用了。
   
0 请登录后投票
最后更新时间:2006-05-08
我也是觉得, 这是为了简化复杂系统的开发. 更细的再分出一层. 复杂的系统, 一个操作可能涉及好几个 table,  因此有必要再细分出一个与业务逻辑无关的数据库层, "与业务逻辑无关的数据库层" 是我乱起的名字, 嘻嘻. 新手请大家多指教
   
0 请登录后投票
最后更新时间:2006-05-08
你这里的manager提供的服务无非就是role的CRUD 当然就会有这种疑问了。难道你没写过一个方法要操作好多次数据库,操作好多实体的情况么?
   
0 请登录后投票
最后更新时间:2006-05-09
组合使用不同的dao
而且可以进行事务处理,统一提交、回滚等
   
0 请登录后投票
最后更新时间:2006-05-12
DAO(Database Access Object),顾名思义就是数据库访问接口,也就是和数据库打交道操作对象.而这些操作往往可以从系统的业务逻辑中独立出来,从而使系统中的数据库操作变得统一和简单化(相对于数据库具体操作混合业务逻辑操作),而且也可以使得系统在和数据库交互出错时,更快的定位问题.
总而言之,我觉得,使用DAO的目的是,将数据控制层和业务逻辑控制层分离开,这样不仅更有利于项目开发时的功能划分和工作分配(负责数据层的人员只注重数据操作,负责业务逻辑控制的开发人员只关注业务逻辑,使得各人的分工简化明晰),在项目维护时也更容易定位和解决问题.
   
0 请登录后投票
最后更新时间:2006-08-02
简单的说,那个东西就是一个插座,你只要更给录音机供电,他都是用同样的方法去产生声音的,不是你用电厂给你的电和用自己发的电就不一样了。
换句话说,就是,换了产生数据的实现,不用改逻辑,照样可以使用,这个应该是接口的一大好处吧!我理解的不好,请大家指教!
   
0 请登录后投票
最后更新时间:2006-08-08
yangwudong 写道
简单的说,那个东西就是一个插座,你只要更给录音机供电,他都是用同样的方法去产生声音的,不是你用电厂给你的电和用自己发的电就不一样了。
换句话说,就是,换了产生数据的实现,不用改逻辑,照样可以使用,这个应该是接口的一大好处吧!我理解的不好,请大家指教!


但產生數據的實現會影響DAO 的設計, 例如直接用JDBC或IBatis 實現的DAO,
比用Hibernate 或JDO 的, 前者粒度會比較細, 後者會比較粗, 若設計不當, 反而會浪費了Hibernate 或JDO 的強大功能
   
0 请登录后投票
最后更新时间:2006-08-14
就像独立的显卡,当然主板也可以集成...
   
0 请登录后投票
论坛首页 Java版 DAO

跳转论坛:
JavaEye推荐