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

在使用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)。
阅读更多
个人分类: Java 程序设计
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭