Рефакторинг PHP кода

Имеется только часть кода приложения предназначенного для планирования, нужно его как-то улучшить. В задании говорится что хорошо бы сделать еще один метод (makeDay) который будет рекурсивно вызывать сам себя ???
<?php 
private function _getProgramWeeksByChildProgram($childProgram)
    {
        $weeks = array(); 
        
        $child = $childProgram->getChild();  //new child
        $program = $childProgram->getProgram(); //child program
        $programdays = $program->getDays(); //child programs day
        for ($i=0; $i<count($programdays); $i++) {
            
                $programday = $programdays[$i];
                if ($programday->isVisable()) {
                    $day = new stdClass();
                    $day->id = $programday->getId();
                    $day->date = $programday->getDate();
                    $day->name = $programday->getName();
                    $day->date = $programday->getDate();
                    $day->description = $programday->getDescription();
                    $day->checkable = $programday->isCheckable();
                    $day->ageGroup = $programday->getAgeGroup();
                    $day->checked = $this->_isCheckedDay($programday, $child);
                    
                    // has other age group ?
                    if (isset($programdays[$i+1])) {
                        $nextProgramDay = $programdays[$i+1];
                        if (is_object($nextProgramDay) &&
                            $nextProgramDay->getDate() == $programday->getDate()) {
                            $secondDay = new stdClass();
                            $secondDay->id = $nextProgramDay->getId();
                            $secondDay->date = $nextProgramDay->getDate();
                            $secondDay->name = $nextProgramDay->getName();
                            $secondDay->date = $nextProgramDay->getDate();
                            $secondDay->description = $nextProgramDay->getDescription();
                            $secondDay->checkable = $nextProgramDay->isCheckable();
                            $secondDay->checked = $this->_isCheckedDay($nextProgramDay, $child);
                            $secondDay->ageGroup = $nextProgramDay->getAgeGroup();
                            $day->secondAgeGroup = $secondDay;
                            $i++;
                        }
                    }

                    $weeks[$programday->getWeekNr()][] = $day;
                }
        }
        return $weeks;
    }
  • Вопрос задан
  • 3725 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Почитайте экстримальное программирование Кента Бэка, там хорошо описаны основные паттерны для рефакторинга. Правда там больше в контексте TDD, но рефакторинг без тестов это всегда боль.

Что до приведенного кода:
введите отдельные сущьности вместо StdClass. Для клониварония можно использовать clone.

А так нужно разбираться в бизнес логике. Но у вас сейчас слишком много кода, можно легко запутаться.
Ответ написан
Комментировать
akubintsev
@akubintsev
Опытный backend разработчик
Да тут просто непаханное поле для рефакторинга как внутри метода, так и за его пределами.
"makeDay" тут не при чём.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
07 мая 2024, в 10:56
500 руб./за проект
07 мая 2024, в 10:52
15000 руб./за проект
07 мая 2024, в 10:51
15000 руб./за проект