Bandicoot
@Bandicoot
Backend Developer since 2015

Правильно ли я делаю с точки зрения ООП?

Разрабатываю API. В экшенах я принимаю параметры, валидирую их, произвожу какие-либо действия, одно или несколько. Упрощенный пример кода экшена:

$validation = new Validation();
$validation->validate($this->request->post());

if ($validation->errors) {
    return 'error';
}

$helper = new Helper($validation);

if ($helper->doSomeThing()) {
    $res = 'ok';
} else {
    $res = 'error';
}

return $res;


Т.е. у меня есть специальный класс для валидации данных, где сможет быть сравнительно сложная логика проверки входных параметров. Далее, при успешном прохождении проверки, объект класса валидации я прокидываю в специальный хелпер, где провожу какое-либо действие. Все необходимые данные для этого действия у меня уже есть в объекте валидации, что весьма удобненько. Но для обеспечения работоспособности одного экшена, мне приходится создавать 2 дополнительных класса - один для валидации, другой для выполнения конкретных действий. Я не стал их объединять, т.к. получился бы перегруженный функционалом класс (в некоторых экшенах на обоих этапах есть достаточно сложная логика проверки, выборки итд). Как можно догадаться, классы нужны для того, чтобы вынести логику из контроллера и не дать разрастись экшену больше чем на 1 экран.

Соответственно у меня 2 вопроса:
1. Правильно ли я делаю в принципе?
2. В какую группу сущностей (сервисы, компоненты итд.) мне отнести хелпер из примера выше, как его лучше назвать.

Пишу на Фальконе.
  • Вопрос задан
  • 362 просмотра
Решения вопроса 1
aleksejjjj
@aleksejjjj
Хелперу передавать объект валидатора как-то криво выглядит. Если нужны данные можно например какой-то метод туда добавить. Типа
$validData = $validation->getValidData();

$helper = new Helper($validData);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@FanatPHP
Чебуратор тега PHP
Ну в целом этот код выглядит чисто процедурным
Замени вызовы методов на вызовы функций - ничего не изменится.

ООПэ - это немного про другое.

Чисто если придираться по реализации - совершенно непонятно что делает класс Хелпер и почему он получает на вход не данные а валидатор.
Ну это я не знаю, как если для варки супа ты используешь не объект Кастрюля, а объект Посуда, кладешь в нее ножик для чистки овощей, а не сами овощи.
Ответ написан
dmitriylanets
@dmitriylanets
веб-разработчик
хелпер может существовать без данных, наверно вряд ли + метод получения ошибок
тогда будет так
$validation = new Validation($this->request->post());
if(!$validation->validate()){
   //var_dump($validation->getErrors());
    return 'error';
}


про Helper молчу, вообще непонятно что делает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы