我正在使用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