论坛首页 Java企业应用论坛

Rapae 弱化DAO的一种方法

浏览 12258 次
精华帖 (0) :: 良好帖 (19) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-06-26  

Service层应该避免相互感知,DAO层也应该避免相互感知。这样可以避免不必要的循环依赖,而且还可以避免更隐蔽点的循环调用。

icewubin 写道
我认为一般情况,可以约定不允许在service中注入service。“只能在service中注入manager”。

 我赞同这种做法,而且也方便进行测试。

0 请登录后投票
   发表时间:2008-06-26  
@Transactional 
public abstract class AccountServiceImpl extends JpaDaoSupport implements AccountService {  
      
    public Account login(String username, String password) {  
        List<?> result = getJpaTemplate().find("from Account where username = ? and password = ?", username, password);  
        return (Account) (result.isEmpty()?null:result.get(0));  
    }  
 
}

一看就是一个DAO的翻版,真正的逻辑层应该屏蔽sql的出现,从而使函数共用达到最高,所以dao可以简化,但是不会消失,否则也只是把dao和manager混合,反而没有达到效果
0 请登录后投票
   发表时间:2008-06-26  
EQL、HQL的出现就是屏蔽了具体的SQL。

DAO也许不会消失,但是绝对不是这个理由
0 请登录后投票
   发表时间:2008-06-26  
zhu_chen001 写道
@Transactional 
public abstract class AccountServiceImpl extends JpaDaoSupport implements AccountService {  
      
    public Account login(String username, String password) {  
        List<?> result = getJpaTemplate().find("from Account where username = ? and password = ?", username, password);  
        return (Account) (result.isEmpty()?null:result.get(0));  
    }  
 
}

一看就是一个DAO的翻版,真正的逻辑层应该屏蔽sql的出现,从而使函数共用达到最高,所以dao可以简化,但是不会消失,否则也只是把dao和manager混合,反而没有达到效果


所以我建议dao和单表操作的manager混合,就是避开你说的这个问题。

但是我还是要说,dao不可能屏蔽sql(包括hql、qbc、qbe),也没有必要屏蔽。
完全屏蔽在稍微复杂一点的系统中,由于团队中水平的高低,绝对会带来性能问题,而且还不好查,不管是orm还是其他方式实现DAO,都需要灵活控制sql或者是sql语句的生成。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics