service层多个方法中包含相同的业务逻辑是一种很常见的现场,通常会遇到如下几个问题:
1.怎样合理的抽象出公共的业务逻辑?
2.怎样处理service层中方法之间的调用?
3.怎样处理这些方法的事务?
下面是我个人的处理方式,仅供参考。由于实现比较简单,所以相关说明较少。
代码示例:
public void serviceMehtod1(){
dao.insert();
....
dao.update();
}
public void serviceMethod2(){
dao.insert();
}
serviceMehtod1中的事务范围是insert()+update(),serviceMehtod2的事务范围是insert(),
添加了事务处理后的代码很简单,相信不用我解释大家都能看明白。
public void serviceMehtod1(){
//开始事务
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
insertService()
....
updateService()
tx.commit();
//事务终止
}
public void serviceMethod2(){
//开始事务
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
insertService();
tx.commit();
//事务终止
}
//公共业务逻辑
//不添加事务处理
public void insertService(){
dao.insert();
}
//公共业务逻辑
//不添加事务处理
public void updateService(){
dao.update();
}
当然,对于公共的业务逻辑,比较好的方式是:封装他们到一个基类。
具体的领域对象或者service层对象继承调用这个基类就可以了。