我正在使用Yii框架開發PHP/MySQL應用程序。在控制器不良行爲中做事務管理?
我遇到以下情況:
在我VideoController
,我有一個actionCreate
這將創建一個新的視頻和actionPrivacy
它設置在視頻的隱私。問題是在actionCreate
期間調用Video
模型的setPrivacy
方法,其中當前有一個事務。我希望將視頻的創建也納入交易中,這會導致錯誤,因爲交易已處於活動狀態。
在上this answer的意見,條例草案Karwin寫道
所以沒有必要使域模型類或DAO類管理 交易 - 做它在控制器級別
和在this answer:
由於您使用的是PHP,因此您的交易範圍最多爲 單一請求。所以你應該只使用容器管理的交易,而不是服務層交易。也就是說,在處理請求的開始 處啓動事務,並在處理請求時完成 並提交(或回滾)。
如果我管理控制器中的交易,我將有一大堆的代碼看起來像:
public function actionCreate() {
$trans = Yii::app()->getDb()->beginTransaction();
...action code...
$trans->commit();
}
這導致重複的代碼在很多地方,我需要交易的行動的地方。
或者我可以重構它到父Controller
類,它會再自動執行每個動作創建交易beforeAction()
和afterAction()
方法。
這種方法會有什麼問題嗎?什麼是PHP應用程序的事務管理的良好做法?
奇妙的問題。我只是投票結束,因爲通常這種類型的討論在http://codereview.stackexchange.com/上得到了更好的處理,因爲它傾向於促進大量關於什麼是「最好」的開放式討論,而不是提供具體,客觀的基於代碼的答案。 – 2013-03-28 18:37:24
我不知道那個網站。我會記得下次使用它。 – 2013-04-01 06:53:41