Задать вопрос

Как такое зарефакторить?

В общем - пишу импортёр данных для интернет магазина из web api стороннего сервиса(что-то похожее на 1С). И столкнулся с проблемой, что класс импорта уже превышает 2500 строк, который состоит из однотипных методов типа importProduct, который берет данные из апи и при необходимости обрабатывает; и методов типа addProduct, которые принимают данные из предыдущего метода и пишут их в бд через AR(yii2). В итоге получается что все эти методы делают одно и тоже, но свести все к одной реализации все равно не получается из-за какой-никакой, но разнице в моделях. Получается, что весь мой код в функциональном стиле, а хотелось бы в объектном, но уже которую неделю ломаю голову, как это сделать так, чтобы было и красиво, и читабельно и хоть немного бы следовало принципам SOLID. А в данный момент на лицо принципы STUPID:)

Хотел бы попросить у опытных людей совета, как бы это сделать лучше, и имеет ли это вообще смысл, т.к. в принципе это все работает, но если где-то что-то поменяется, то переделывать придётся чуть ли не каждый метод.
  • Вопрос задан
  • 923 просмотра
Подписаться 5 Средний 2 комментария
Решения вопроса 2
В слепую, конечно, сложно судить, но исходя из общих практик запись можно в отдельный уровень вынести - слой репозитория. Однотипные функции обработки попробовать оформить паттерном «стратегия», с соответствующими инъекциями контрактов реализаций.
Ответ написан
Adamos
@Adamos
По описанию - подходящий случай для Dependency Injection
function doSameAction(AbstractDirrefentClass $di)
{
  // делаем общий код
  $di->makeDifference($data); //А весь различающийся реализован в классах, реализующих один и тот же интерфейс
}

Как вариант, этот $di можно передавать не в каждую функцию, а в конструктор класса и присваивать приватному члену.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kirill-Gorelov
С ума с IT
Я думаю тут стоит руководствоваться таким принципом: "Работает, не трогай".
Иногда мне кажется лучше все с нуля переписать, чем пробовать исправить это.

К тому же тут я как понимаю проблема не в скорости работы, всего лишь в том что не нравиться как выглядит? Тогда точно стоит переписать все с нуля если это принципиально. А там уже решаешь сам.
Это сугубо мое мнение.
Ответ написан
Ваш ответ на вопрос

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

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