精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-22
我的BaseDAO如下: java 代码
其余Dao继承这个BaseDAO: java 代码
然而Dao中出现事务操作是不合适的,所以这里想分出BO层处理session以及事务的处理,修改完后的BaseBO应该大体如下: java 代码
我的问题是 1,对应的BO应该如何处理?BaseDAO中的session应该如何获取?BO中如何传递过来?(没用Spring之用到Struts+Hibernate)session的获取是SessionFactory通过ThreadLocal获取的 2,是否也应该写一个BaseBO来对应处理BaseDAO中的各个操作以避免每个BO中处理crud操作? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-23
wgfywin 写道 在J2EE体系中,JTA是独立于各种web和ejb组件之外提供的一个服务。
将connection或者session资源的获取放到business logic中就不应该了,business logic不应该偶合这些与业务无关的逻辑
对于你的问题,我觉得应该是使用JTA来解决,在BO层,不管是CMT(使用ejb,或者spring的话),还是你自己使用userTransaction,Transaction都是你在BO中从APP平台中取得的Transaction服务,而不是session里面获取的。(好像有点偏题,呵呵) 如果我记的不是错太远的话,以前这边有帖子专门讨论过关于领域模型,业务建模的问题。 DAO提供的方法的connection或者hibernate的session是在business logic中传递给DAO的实现类的。(因为实际上,DAO一般是接口,然后提供一个DAOImpl来实现这个接口,business logic的代码是基于DAO接口编写的,从而脱离了对persistence具体方式(如DB)的依赖)。 xxLogic() { Get Session, Get Transaction from Session. XXDAO dao = new XXXDAOImpl(session,xx);// or inject by spring, or use a factory to get the DAO. try{ beginTrans; dao.accessData(xxx); dao.accessData2(yyy); .... commit; }catch(xxx){ rollback; }finally{ release resources. } } |
|
返回顶楼 | |
发表时间:2007-06-23
楼主,对范型的使用上就有问题.
|
|
返回顶楼 | |
发表时间:2007-06-24
galaxystar 写道 楼主,对范型的使用上就有问题.
请指教...谢谢 |
|
返回顶楼 | |
发表时间:2007-06-25
BaseDao后还需要各自entity的dao,写代码不写死了,要是有20个类,还得去copy 20个xxxDAO?
何不直接使用一个BaseDao,提供save,delete,update,query,findById方法。 使用: User user = (User)baseDao.findById('123'); |
|
返回顶楼 | |
发表时间:2007-06-25
yongyuan.jiang 写道 BaseDao后还需要各自entity的dao,写代码不写死了,要是有20个类,还得去copy 20个xxxDAO?
何不直接使用一个BaseDao,提供save,delete,update,query,findById方法。 使用: User user = (User)baseDao.findById('123'); 不知道您是否没仔细看,或者是我的代码没表达清楚我的意思,我的BaseDao中已经提供了crud方法,写BaseDao就是为了其余entity的dao中避免copy重复的crud方法 比如ColumnAction中直接调用ColumnDao的creat方法(继承父类BaseDao)就可以,而不用再在ColumnDao处理crud方法 |
|
返回顶楼 | |
发表时间:2007-06-25
java 代码
其实我的主要疑问是当Dao中的session,事务操作都放到BO中后,BaseDao的crud操作改如何处理?是否也写个BaseBO做对应的操作? 其余的dao方法很容易处理,比如我ColumnsDao中有个取出所有一级栏目的操作getColList1()方法,改写后ColumnsDao对应的方法如下: java 代码
对应ColumnsBO如下: java 代码
这样似乎很顺畅,但是遇到BaseDao里的crud方法,因为ColumnsDao根本就没出现过crud方法,ColumnsBO该如何处理?也写个BaseBO对应处理BaseDao的方法?感觉怪怪的... BTW:不知道我是否能把我的意思表达清楚,语言表达能力有限,给各位舔堵了:( |
|
返回顶楼 | |
发表时间:2007-06-25
晕...发现所有范型有关的尖括号都被过滤掉了
|
|
返回顶楼 | |
发表时间:2007-06-26
请看这篇文章《不要重复DAO》
http://www.ibm.com/developerworks/cn/java/j-genericdao.html |
|
返回顶楼 | |
发表时间:2007-07-02
异常为什么要这样处理呢?
# catch(HibernateException e){ # throw e; # } |
|
返回顶楼 | |