@verygoodboy

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

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

Если схематично и примитивно показать, это могло бы выглядеть так, типа:
class Parser
public function parse()
protected function one($params)
protected function two($params)
protected function three($params)
....
protected function n($params)


Все protected функции последовательно работают над одной задачей чтобы вернуть результат в parse()
Но такой класс тяжело поддерживать, тестировать и расширять и это некрасиво.

Как все это красиво организовать, чтобы было удобно поддерживать, тестировать и масштабировать?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Далеко не всегда стоит разбивать класс ради красоты и т.д. Выносить отдельно стоит вещи которые вы сможете как-то использовать отельно. В противном случае вы только вынесете сложность на уровень взаимодействия классов, а поддержка не упростится.

Если у вас получится выделить общий интерфейс для части обработчиков - попробуйте их вынести отдельно. Если же интерфейс прийдется корректировать под каждый случай - лучше не стоит.

То, что вам точно поможет - это убрать всё лишнее. Например уровень работы с файловой системой в парсере не нужен, его стоит сразу отделять. Как вариант можете так же разделить парсинг по этапам: например первый этап на базе неких данных строит их модель. наполняя некую модель данных. Впторой этап - пост процессинг, на вход берет модель данных и обрабатывает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dmitriylanets
@dmitriylanets
веб-разработчик
Паттерн стратегия
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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