我了解交易工作,一切功能如何预期,但我不喜欢我访问连接提交或者回滚事务的方式。什么是要访问一个事务提交或回滚的首选方式?
我有3个服务类可以访问相同的单身连接对象。我想在一个事务中来包装这三样东西,所以我这样做:
try {
$service1 = new ServiceOne;
$service2 = new ServiceTwo;
$service3 = new ServiceThree;
$service1->insertRec1($data);
$service2->deleteRec2($data);
$service3->updateRec3($data);
$service1->getSingletonConnection()->commit();
}
catch(Exception $ex) {
$service1->getSingletonConnection()->rollback();
}
通过getSingletonConnection返回的连接对象只是周围的OCI8连接的包装,并承诺是oci_commit
;回滚是oci_rollback
。
正如我所说,这是可行的,因为他们都访问相同的连接,但通过任意的服务对象访问连接感觉不对。另外,还有一些在我的应用程序中使用两个不同的数据库,所以我需要确保我检索并提交正确的......不知道是否有周围,虽然任何方式。
有没有更好的方式来处理交易?
我完全同意,不过,如果你传递的是对象,你甚至可能会考虑完全干涉“Singleton”实现。 – 2011-03-08 15:04:56