Работали ли вы с Legacy-кодом?

«Работали ли вы с Legacy-кодом?» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, много работал с Legacy-кодом. Основные сложности, с которыми сталкивался:

  1. Отсутствие тестов — код без unit-тестов, что затрудняет рефакторинг
  2. Устаревшие зависимости — старые версии фреймворков и библиотек с известными уязвимостями
  3. Нарушение принципов SOLID — большие "божественные" классы, сильные связи между модулями
  4. Устаревшие подходы к безопасности — SQL-инъекции, отсутствие валидации входных данных

Мой подход к работе с Legacy-кодом:

// Пример рефакторинга уязвимого кода
// Было (legacy-подход):
$userId = $_GET['user_id'];
$query = "SELECT * FROM users WHERE id = $userId";
$result = mysql_query($query);

// Стало (после рефакторинга):
$userId = filter_input(INPUT_GET, 'user_id', FILTER_VALIDATE_INT);
if (!$userId) {
    throw new InvalidArgumentException('Invalid user ID');
}

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :userId");
$stmt->execute([':userId' => $userId]);
$user = $stmt->fetch();

Ключевые практики:

  • Сначала добавляю тесты для существующей функциональности
  • Использую постепенный рефакторинг ("шаг за шагом")
  • Внедряю статические анализаторы (PHPStan, Psalm)
  • Документирую все изменения и создаю "карту долгов" (technical debt map)