Задать вопрос
DPhil
@DPhil
Контент-менеджер

Какова должна быть правильная архитектура парсера на PHP?

Когда пишешь класс Parser, в нем по сути два метода. Первый parse(), который посылает курлы и пишет ответы в массив $this->data и второй метод -- import(), который этот массив записывает в БД.

Вот ты как это правильно реализовать в клиентском коде?

1. Вызывать оба метода по очереди?

2. Или вызывать какой-то один, а второй: переписываешь класс Parser, чтобы второй метод изнутри первого вызывался? Например parse() вызывался изнутри import(). Как вариант: создать третий метод invoke() или handle() и вызвать оба рабочих поочередно из него? А если понадобится писать не в базу, а в файл, писать Parser2?
  • Вопрос задан
  • 1020 просмотров
Подписаться 4 Средний 6 комментариев
Решения вопроса 1
azerphoenix
@azerphoenix
Java Software Engineer
Добрый день.
Являюсь Java разработчиком, но от этого суть не меняется.
Согласно SOLID каждый класс должен заниматься своей задачей.
Соответственно, Parser и метод parse() должен парсить.
Что касается метода import(), то скорее всего он должен быть переименован, все-таки вы сохраняете данные в БД, а не импортируете данные извне в ваш код. И должен лежать в другом сервисном классе. Например, {Article}DAO
А методы import export должны лежать в другом классе, которые отвечают за ввод и вывод данных из БД в файл xlsx, csv и т.д.
Называть классы Parser1, Parser2 и т.д. некорректно с точки зрения CleanCode. На refactoring.guru есть полезные статьи и курсы про это
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Для начала бы хоть объяснил что именно ты парсишь.
А если понадобится писать не в базу, а в файл, писать Parser2?

класс должен выполнять свою непосредственную задачу - парсить, работа с хранилищами данных - отдельная тема, соответственно каждое хранилище - отдельный класс и все они реализуют интерфейс.
Ответ написан
@magarif
Программист
Тут как минимум три класса, а при правильной архитектуре и всё 10.

1) получить откуда-то данные
2) преобразовать/очистить как-то данные
3) сохранить куда-то данные

Почему может быть много классов? Потому что вместо *откуда-то*, *как-то* и *куда-то* можно подставить много чего. И это решается всякими фабриками и прочим.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы