Как показать возможности 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);