Встал вопрос, можно ли выносить HttpException в сервис?
Допустимо ли это по хорошей архитектуре, или это должно привести к проблемам?
Вот два варианта.
1. В контроллере только вызов сервиса. Исключение будет брошено в сервисе.
Код: Выделить всё
class ArticleController extends Controller
{
public function actionView($id)
{
$article = ArticleFinder::findPublishedOrDie($id);
return $this->render('view', ['model' => $article]);
}
}
class ArticleFinder
{
public static function findPublishedOrDie($id)
{
$article = Article::find()->where(['published' => true]);
if (empty($article)) {
throw new HttpNotFoundException;
}
return $article;
}
}
Код: Выделить всё
class ArticleController extends Controller
{
public function actionView($id)
{
$article = ArticleFinder::findPublished($id);
if (empty($article)) {
throw new HttpNotFoundException;
}
return $this->render('view', ['model' => $article]);
}
}
class ArticleFinder
{
public static function findPublished($id)
{
return Article::find()->where(['published' => true]);
}
}
Вариант 2. Плюс - красивый сервис, не подкопаться. Минус - контроллер стал толще.
Что лучше? Кто как решает эту задачу? Прошу мнений.