我瞭解交易工作,一切功能如何預期,但我不喜歡我訪問連接提交或者回滾事務的方式。什麼是要訪問一個事務提交或回滾的首選方式?
我有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