Как показать возможности SOLID в тесте слепого рефакторинга

Запрос — что можно улучшить в этом фрагменте и как можно протестировать.

Имейте в виду, что вы не можете получить доступ к общедоступным методам Schedule, DatabaseRepository, ApiRepositoryи ScheduleFactoryклассы, и они не могут быть отредактированы. У вас нет видимости кодовой базы.

      require __DIR__ . '/vendor/autoload.php';

class ScheduleService
{

    public function plan($budget, $days, $repositoryName, $city): Schedule
    {
        if ($repositoryName === 'db') {
            $repository = new DatabaseRepository($city);
            $activities = $repository->getActivitiesByBudget($budget);
        } elseif ($repositoryName === 'api') {
            $repository = new ApiRepository($city);
            $activities = $repository->getActivitiesFromAPI($budget);
        }

        return ScheduleFactory::fromActivities($activities, $days);
    }
}


// data to test
$budget = 200;
$days = 4;
$city = 'berlin';

// map a city to a repository name
$map = ["berlin" => 'db', "tokyo" => 'db', "paris" => 'db', 'lisbon' => 'api', 'barcelona' => 'api', 'madrid' => 'api'];

// execute service
$repositoryName = $map[$city];
$service = new ScheduleService();
$schedule = $service->plan($budget, $days, $repositoryName, $city);

print_r($schedule);

0 ответов

Другие вопросы по тегам