作者poopoo888888 (阿川)
看板PHP
标题[请益] 我该怎麽改善这个肥controller action?
时间Fri Nov 28 10:33:26 2014
小弟最近在写一个专案管理软体(用Laravel)
这个网站有整合Google Drive SDK
我希望我的code漂亮遵循「Separation of Concern」,这样我单元测试比较容易
我有'Project'跟'Document'类别当作domain model
然後我用Decorator Pattern写了
'ProjectValidator'跟'DocumentPermissionManager' 类别
前者用来验证资料、後者处理Google Drive 权限API
写了半天,最後我有一个controller action还是很肥很丑:
(当管理者把一个专案状态设为ready)
public function postSendToReady()
{
$project = Project::find(Input::get('id'));
$project->status = Project::READY_STATUS;
$validator = new ProjectValidator($project);
if ( !$validator->validateAllDocumentsAreReady() ){
return Redirect::to('/pm')->with('messages', $validator->getErrors() );
}
$project->save();
foreach($project->documents as $document){
$permissionManager = new DocumentPermissionManager($document);
$permissionManager->insertPermission(Auth::user()->email);
// email failure should not stop the procedure. log it and go on
try{
Mailer::notifyAdministrators($document);
} catch (Exception $e) {
Log::error($e, array('url'=>Request::url()),
array('url'=>Request::url()));
}
try{
Mailer::notifyClients($document);
} catch (Exception $e) {
Log::error($e, array('url'=>Request::url()),
array('url'=>Request::url()));
}
}
return Redirect::to('/pm')->with('message', 'Updated project
successfully.');
}
这个controller action很肥、而且没有重用性
我该怎麽办?我该多写哪几种类别吗?
我少写什麽抽象化?有什麽Design Pattern能帮助我吗?
感激不尽!!! <(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.167.25.142
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/PHP/M.1417142009.A.4D2.html
1F:推 amhuang: 可以先了解 SOLID principles 11/28 23:43