cdoframework系列介绍4:通用事务调用接口

 cdoframework的官方网站:http://www.cdoframework.com

  一个业务对象的事务调用接口,目前通行的做法是为每一个事务定义一个特定的方法,如果一个对象实现了多个事务,则会定义出多个方法。下面的例子说明了这一点:

public interface EmployeeManager
{
int addEmployee(Employee emp);
int modifyEmployee(Employee emp);
int deleteEmployee(String employeeId);
}


  CDO开发框架认为,事务执行的本质是数据交换。一个事务(或者一个方法)的执行过程,其实是输入请求数据,输出应答数据的过程。同时,我们还要知道事务的执行成功与否。此外,事务行为,即方法名,CDO应用开发框架也视其为请求数据的一部分,这样,任何一个事务,都可以统一为包含请求数据,应答数据和执行结果的执行过程,可定义为:

  Return handleTrans(CDO cdoRequest,CDO cdoResponse)

  完整的事务对象的接口定义如下:

public interface ITransService
{
Return init();
void destroy();
Return handleTrans(CDO cdoRequest,CDO cdoResponse);
}


  在handleTrans方法中,cdoRequest表示请求数据,cdoResponse表示应答数据,Return代表执行结果。

  通用事务调用接口的一个显而易见的好处是,我们无需为不同的业务对象定义不同的接口(不用再编写接口定义文件了),事务方法的变更不会影响接口定义。
更为重要的是,由于所有业务对象的事务接口统一了,我们就可以以一种通用的方式实现各事务的业务逻辑。通过可以提供一个服务总线对象,把事务对象转换成和该服务总线对象相连接的一个服务对象。每个服务对象之间的调用不再通过相互引用达成,而是各自仅仅和总线对象相关,各服务对象之间将完全没有代码上的耦合,一个服务对象对另一个服务对象的调用,完全是透明地通过服务总线对象进行的。下图的黄色部分即代表服务总线。

2.利用handleTrans实现通用事务调用接口

  像上面的EmployeeManager接口的三个方法,可以统一用handleTrans来代替。其中:

  1) cdoRequest为请求对象,保存事务的请求参数等信息。请求对象中通过strServiceName和strTransName组合作为Key区分不同的事务,其值为对应的事务名,比如下面的代码填充了一个请求对象:

cdoRequest.setStringValue(“strServiceName”,” EmployeeService”);
cdoRequest.setStringValue(“strTransName”,”addEmployee”);
cdoRequest.setStringValue(“strName”,”张三”);
cdoRequest.setIntegerValue(“nAge”,20);
//…


  2) cdoResponse为应答对象,保存事务执行的输出,如果没有输出,可以不填充;
  3) Return为返回对象,保存事务的执行结果

  在handleTrans内部,再根据strServiceName和strTransName的值,执行对应的某个具体方法。如果某个事务是handleTrans所不应该处理的,则handleTrans返回null,以表示未对该事务进行处理。

  这种方式在统一了方法定义的同时,还利用CDO对象的优势,避免了开发诸如Employee这样的数据类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值