Рефакторинг кода контроллера MVC модели? Здравствуйте товарищи! Я долго пытался понять как избавится от обилия условных операторов в коде, они изрядно заставляют глаза побегать и снижают читаемость кода. Подскажите пожалуйста, как без создания новых методов класса избавится от обилия условных операторов, ниже пример кода метода класса контроллера: //вывод запрашиваемой статьи из базы
function getAction()
{
$fc=FrontController::get();
$url=$fc->getParams();
$view=new View();
//возваращаем запрашиваемую статью из базы в виде ассоциативного массива
$view->content=Articles::get()->getArticle((int)$url['id']);
//выборка комментариев к статье
$view->comments=Articles::get()->getComments((int)$url['id']);

if($_SERVER['REQUEST_METHOD']=='POST' and isset($_POST['addcomment']))
{
if($_SESSION['captcha']==crypt($_POST['captcha'],'x)p_q1'))
{
if(!empty($_POST['comment_txt']) and !empty($_POST['name']))
{
if($_POST['article_id']==(int)$url['id'])
{
$check=Articles::get()->checkComment($_POST['article_id'], $_POST['comment_txt'], $_POST['name']);
if($check=='0')
{
$view->comments=Articles::get()->addComment($_POST['article_id'], $_POST['comment_txt'], $_POST['name']);
($view->comments) ? $view->comments='Ваш комментарий успешно добавлен!' : $view->comments='Ошибка при вставке комментария!';
}
else
$view->comments='Данный комментарий уже добавлен!';
}

else
$view->comments='Вы пытаетесь вставить комментарий не в ту статью!';
}
else
$view->comments='Поля не должны содержать пустых значений!';
}
else
{
$view->comments='Вы ввели символы с картинки некорректно!';
}

}
else
{
//проверка на наличие пришедших данных
($view->comments==false) ? $view->comments='Комментариев к статье еще нет!': $view->comments;
}

(empty($view->content['title'])) ? $view->title='Такой статьи нет': $view->title=$view->content['title'];
(empty($view->content['meta_key'])) ? $view->keywords='' : $view->keywords=$view->content['meta_key'];
(empty($view->content['meta_description'])) ? $view->description='' : $view->description=$view->content['meta_description'];

$result=$view->render('../views/article.php');
$fc->setBody($result);
}
Заранее благодарен! не отрубайте мне руки пожалуйста :)

21 Авг 2019 в 07:09
172 +1
0
Ответы
1

Для упрощения кода и уменьшения количества условных операторов в вашем контроллере, можно использовать ранние возвраты из функции и оптимизировать логику условий. Вот пример рефакторинга вашего метода getAction():

function getAction()
{
$fc=FrontController::get();
$url=$fc->getParams();
$view=new View();
//возваращаем запрашиваемую статью из базы в виде ассоциативного массива
$view->content=Articles::get()->getArticle((int)$url['id']);
//выборка комментариев к статье
$view->comments=Articles::get()->getComments((int)$url['id']);
if($_SERVER['REQUEST_METHOD']!='POST' || !isset($_POST['addcomment']))
{
($view->comments) ? $view->comments='Комментариев к статье еще нет!' : '';
$view->title = empty($view->content['title']) ? 'Такой статьи нет' : $view->content['title'];
$view->keywords = empty($view->content['meta_key']) ? '' : $view->content['meta_key'];
$view->description = empty($view->content['meta_description']) ? '' : $view->content['meta_description'];
$result=$view->render('../views/article.php');
$fc->setBody($result);
return;
}
if($_SESSION['captcha'] != crypt($_POST['captcha'],'x)p_q1'))
{
$view->comments='Вы ввели символы с картинки некорректно!';
$result=$view->render('../views/article.php');
$fc->setBody($result);
return;
}
if(empty($_POST['comment_txt']) || empty($_POST['name']))
{
$view->comments='Поля не должны содержать пустых значений!';
$result=$view->render('../views/article.php');
$fc->setBody($result);
return;
}
if($_POST['article_id'] != (int)$url['id'])
{
$view->comments='Вы пытаетесь вставить комментарий не в ту статью!';
$result=$view->render('../views/article.php');
$fc->setBody($result);
return;
}
$check=Articles::get()->checkComment($_POST['article_id'], $_POST['comment_txt'], $_POST['name']);
if($check=='0')
{
$view->comments=Articles::get()->addComment($_POST['article_id'], $_POST['comment_txt'], $_POST['name']);
($view->comments) ? $view->comments='Ваш комментарий успешно добавлен!' :
$view->comments='Ошибка при вставке комментария!';
}
else
{
$view->comments='Данный комментарий уже добавлен!';
}
$result=$view->render('../views/article.php');
$fc->setBody($result);
}

Этот рефакторинг убирает лишние вложенные условия, что делает код более читаемым и поддерживаемым. Помните, что всегда стоит стремиться к минимизации сложности кода и избегать избыточных конструкций.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 093 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир