锁定老帖子 主题:Rapae 弱化DAO的一种方法
精华帖 (0) :: 良好帖 (19) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-26
Service层应该避免相互感知,DAO层也应该避免相互感知。这样可以避免不必要的循环依赖,而且还可以避免更隐蔽点的循环调用。 icewubin 写道
我认为一般情况,可以约定不允许在service中注入service。“只能在service中注入manager”。
我赞同这种做法,而且也方便进行测试。 |
|
返回顶楼 | |
发表时间: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混合,反而没有达到效果 |
|
返回顶楼 | |
发表时间:2008-06-26
EQL、HQL的出现就是屏蔽了具体的SQL。
DAO也许不会消失,但是绝对不是这个理由 |
|
返回顶楼 | |
发表时间: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语句的生成。 |
|
返回顶楼 | |