ivanov77
Новичок
Снова привет.
Просмотрел лекцию java ментора по чистому коду, один момент остался не совсем понятен.
Он там говорит о том что метод который что то делает не должен возвращать результат в виде статус кодов, и null в том числе, а если что то пошло не так то кидать Exception. Но все же есть случай когда вроде как надо вернуть, то делить метод на два, один проверяющий, другой так же само все равно кидающий исключение
Вот тут всего если минутку послушать.
Так что, в коде, это будет выглядеть так, и это норм?:
Тут получается 2 запроса, но он в этом не видит проблемы, видимо у них там еще кеши настроены под такое.
И два раза throw получился
А профит получается в чем - ArticleService::getById() гарантированно должно возвращать только то что запрошено, а не например еще null как статус того что не найдено.
Просмотрел лекцию java ментора по чистому коду, один момент остался не совсем понятен.
Он там говорит о том что метод который что то делает не должен возвращать результат в виде статус кодов, и null в том числе, а если что то пошло не так то кидать Exception. Но все же есть случай когда вроде как надо вернуть, то делить метод на два, один проверяющий, другой так же само все равно кидающий исключение
Вот тут всего если минутку послушать.
Так что, в коде, это будет выглядеть так, и это норм?:
Код:
class ArticleService
{
public function update(ArticleARModel $article, array $formData)
{
$article->setAttributes($formData->getAttributes());
//additional actions
//...
$article->save();
}
public function checkIfExistsById($id)
{
return (bool) ArticleARModel::findOne($id);
}
public function getById($id)
{
if ($article = ArticleARModel::findOne(($id)) {
return $article;
}
throw new DomainException('Article not found');
}
}
Код:
class ArticleController extends \yii\web\Controller
{
/**
* @var ArticleService
*/
private $service;
public function actionUpdate($id)
{
if (!$this->service->checkIfExistsById($id)) {
// что то делаем дополнительное, может редирект, но вообще то тут в основном будет:
throw new HttpNotFoundException('Article not found');
}
try {
$article = $this->service->getById($id);
} catch (DomainException $e) {
throw new HttpNotFoundException('Article not found');
}
$form = new ArticleForm();
$form->load(Yii::$app->request->post());
if ($form->validate()) {
$this->service->update($article, $form);
$this->redirect('article', [$article->id ]);
}
//...
}
}
И два раза throw получился
А профит получается в чем - ArticleService::getById() гарантированно должно возвращать только то что запрошено, а не например еще null как статус того что не найдено.