Ответ
Да, это частая часть реальных проектов. Мой подход к legacy-коду — не переписывать всё с нуля, а постепенно улучшать, делая его более поддерживаемым и безопасным.
Моя стратегия:
- Сначала анализ: Изучаю код, ищу самые критические точки (например, SQL-инъекции, устаревшие расширения вроде
mysql_*). - Изоляция и покрытие: Пытаюсь изолировать самый проблемный модуль и написать для него хотя бы минимальные интеграционные тесты перед изменениями.
- Пошаговый рефакторинг: Делаю небольшие, безопасные изменения. Например, заменяю прямой вызов
mysql_queryна подготовленные запросы с PDO в одном конкретном методе.
// Было (legacy)
$result = mysql_query("SELECT * FROM users WHERE id=" . $_GET['id']);
// Стало (после рефакторинга)
$pdo = new PDO($dsn, $user, $pass);
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => (int)$_GET['id']]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Такой подход минимизирует риски и постепенно приводит код к современным стандартам.
Ответ 18+ 🔞
А, ну это же классика, ёпта! Каждый второй проект, в который приходишь, выглядит так, будто его писали в 2002-м году, пока все пили портвейн за гаражами. Код — пиздец, а не код, но переписывать всё с нуля — это верный способ накрыться медным тазом вместе со всеми дедлайнами.
Как я с этим обычно разбираюсь:
- Сначала охуеваю и анализирую: Сажусь, вникаю, ищу самое пиздатое. Ну там, где прям SQL-инъекции торчат, как хуй с горы, или эти ужасные
mysql_*функции, от которых у любого нормального разработчика волнение ебать начинается. - Изолирую и прикрываю жопу: Выбираю самый проблемный кусок, этот пиздопроебибна-модуль, и пытаюсь вокруг него хоть какие-то тесты накрутить. Хуй там толстый будет, конечно, но чтобы хоть чуть-чуть доверия ебать к изменениям появилось.
- Рефакторю по чуть-чуть, как крот: Не лезу сразу во всё. Беру один конкретный говнокодный метод и делаю его чуть менее страшным. Например, выношу этот ужас прямых запросов нахуй и ставлю нормальные подготовленные.
// Было (старый пиздец)
$result = mysql_query("SELECT * FROM users WHERE id=" . $_GET['id']);
// Стало (уже не так страшно)
$pdo = new PDO($dsn, $user, $pass);
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => (int)$_GET['id']]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Так хоть не убьёшь работающую систему, и потихоньку выводишь её из состояния "терпения ноль ебать" во что-то более-менее адекватное.