Работа с легаси-кодом
легаси — это код без тестов, который страшно менять. Чтобы его улучшить, нужны особые приёмы.
Почему это важно: Большая часть работы backend-разработчика — это поддержка существующих систем, а не green field.
Главная идея
Сначала сделать код тестируемым, затем покрыть характеризующими тестами, и только потом начинать менять структуру.
Как это выглядит на практике
- Найти 'шов' (seam) — место, где можно вклиниться без изменения поведения.
- Через шов внедрить заглушку или фейк зависимости.
- Написать характеризующие тесты на текущее поведение.
- Под защитой тестов начать аккуратный рефакторинг.
Что происходит под капотом
- Seam — точка, где поведение можно менять без правки кода.
- Sprout Method/Class — новый функционал добавляется рядом, а не внутрь легаси.
- Wrap Method — оборачиваем старый метод новым, чтобы добавить поведение.
- Anti-corruption layer — слой, изолирующий легаси от нового кода.
Типичные ошибки и заблуждения
- Ошибка: 'легаси надо снести'. Чаще выгоднее улучшать постепенно.
- Ошибка: 'тесты потом'. Без тестов любое изменение опасно.
- Ошибка: трогать всё подряд. Лучше менять только то, что мешает текущей задаче.
- Ошибка: документировать вместо рефакторинга. Документация устаревает, код — нет.
Ключевые выводы
- Легаси — это не приговор, а условия задачи.
- Сначала тесты, потом изменения.
- Sprout/Wrap позволяют добавлять функционал безопасно.
- Цель — не идеальный код, а контролируемые изменения.
Термины урока
Legacy code — по Фезерсу, код без тестов.
Working Effectively with Legacy Code — каноническая книга Майкла Фезерса.
Characterization test — тест, фиксирующий текущее поведение, даже если оно странное.
Big ball of mud — антипаттерн, описывающий хаотичную архитектуру.
Связь с работой backend-разработчика
Работа с легаси — повседневная реальность backend. Умение делать её безопасно — конкурентное преимущество.
Мини-разбор реальной ситуации
Сервис биллинга 8 лет никто не трогал. Команда написала характеризующие тесты на 5 ключевых сценариев, после чего смогла за месяц добавить новый тариф без регрессий.
Что запомнить
- Легаси = код без тестов.
- Швы — ваши друзья.
- Sprout > переписывание.
Итог
Работа с легаси — это про дисциплину, а не про героизм.
Комментарии к уроку
Войдите, чтобы оставить комментарий.
Пока нет комментариев — будьте первым.