您的位置:首页 > 其它

软件开发过程中的事务处理(三)

2007-10-11 10:20 190 查看
在使用Hibernate时,我们会发现Hibernate在装载一个对象的时候有两个方法可以使用:load和get,而这两个方法的调用方法基本上是一致的,而唯一的区别就是,当Hibernate没有找到对象时,load抛出异常,而get仅仅返回一个null。

为什么Hibernate采用这样的设计呢?在这里笔者也不敢妄加揣测,但是这一设计却可以很好地解决我们在软件开发过程中的事务处理(二) 中遇到的问题,在软件开发过程中的事务处理(二) 我们提到如果DAO方法完全不抛出异常,那么我们就会发现,很可能在service层我们需要不停的编写重复代码,而如果在DAO层抛出异常,我们就会在service层编写写操作时就会出现




catch(***Exception e)...{


ConnectionPool.rollback(Connection);


throw e;


}

这样的代码。

那么我们完全可以向Hibernate一样,为一个方法编写两个实现,在没有发现要返回的对象时,一个方法抛出异常,而另外一个直接返回null。这样一来,我们在service层中只读操作中调用抛出异常的方法;而在写操作中调用返回null的方法,然后在service层中,判断对象是否为null,从而进行相应的操作(要方法回滚,还是继续以下的操作。)

那么我们在DAO层的API设计如下:

dao.getThread(int threadId);
doa.loadThread(int threadId) throws ObjectNotFoundException;
dao.deleteThread(int threadId);

而在service层中,delete,rate等写操作调用dao.getThread方法,而viewThread等只读方法则调用dao.loadThread方法。

版权所有: idilent 网站转载请注明作者并链接到http://blog.csdn.net/idilent,
其他转载方式请与作者联系(idilent@yahoo.com.cn)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: