Эта книжка выросла из моего доклада «Рефакторинг на максималках»1, который я готовил в январе 2022 года. Для этого доклада я собрал различные эвристики и техники рефакторинга, которыми хотел поделиться.
При подготовке стало очевидно, что в 40-минутный слот не получится затолкать всё, о чём хотелось бы рассказать. Материала оказалось много — пришлось его ужимать, фильтровать и обрезать, чтобы уместиться в отведённое время и показать полезные практики.
Отфильтрованный материал было жалко. В нём оставались детали и уточнения, когда что-то применимо, а когда не очень. Я решил, что будет полезнее не выбрасывать всё, что не вместилось, а изменить формат и выпустить в виде небольшого сборника. Так появилась эта книжка.
В первую очередь этот текст может оказаться полезным разработчикам веб-сервисов, пользовательских приложений и интерфейсов, которые пишут на высокоуровневых языках и имеют пару-тройку лет опыта.
Разработчики библиотек тоже могут найти для себя полезные подходы, но я буду фокусироваться на пользовательских приложениях и веб-сервисах — в этой области у меня больше опыта.
Я не учитываю специфику низкоуровневой разработки. Часть эвристик могут противоречить хорошим практикам или даже вредить низкоуровневому коду. Если вы пишете близко к железу, будьте аккуратны, читайте на свой страх и риск 😃
Я не претендую на единственно правильный способ рефакторить или писать код. Если у вас много опыта, вероятно, о большей части описанных техник вы уже знаете и у вас есть своё мнение на их счёт.
Также я не стараюсь написать «мануал», который будет универсально применим во всех проектах. Моё восприятие, привычки и метод работы искажены моим опытом разработки. Ваш опыт, проекты и привычки могут сильно отличаться от моих, поэтому взгляды тоже могут не совпадать. Это нормально.
Цель этой книжки в том, чтобы описать набор практик, эвристик и подходов, которые в своё время помогли мне начать писать код, который кажется хорошим мне и командам в проектах, где я участвовал.
Не все практики надо применять всегда. Решение, применять идею или нет, сильно зависит от проекта, задачи, ресурсов и цели рефакторинга. Старайтесь выбирать те идеи, которые принесут больше выгоды при меньших затратах.
Если что-то из книги кажется вам полезным, обсудите это с коллегами и другими разработчиками. Убедитесь, что у вас с командой одинаковое мнение о пользе и издержках выбранной идеи. Не применяйте то, что вызывает в команде споры или разногласия.
Все описанные техники и приёмы — это большая компиляция прочитанных книг и моего опыта в разработке. Большую часть времени я посвятил разработке пользовательских приложений среднего и иногда большого размера.
Мой опыт накладывает отпечаток на то, как я вижу хороший код. По сути вся книжка — это такой снапшот моего восприятия разработки в 2022 году. Если вы читаете это в будущем (привет!), возможно, моё мнение поменялось, так бывает.
К слову 🐝 |
---|
Я буду обновлять текст книги по мере изменения мнения, но не могу гарантировать, что буду это делать оперативно и без задержек. |
При чтении книги помните о когнитивных искажениях автора. Мысленно сравнивайте техники со своим проектом и думайте об их применимости.
В тексте я подразумеваю, что вы уже знакомы с самим понятием рефакторинга2 и что у вас есть пара лет опыта программирования. Я ожидаю, что вы уже сталкивались с проблемами декомпозиции задач, «протекающих» абстракций, разграничением ответственности между модулями и т.д.
Я рассчитываю, что вы слышали о какой-то части «программистских словечек» из вот этого списка:
- Разделение ответственности
- Зацепление и связность
- Декларативность
- Слои абстракции
- Разделение на команды и запросы
- Ссылочная прозрачность
- Функциональный пайплайн
- Функциональное ядро в императивной оболочке
- Слои архитектуры, порты и адаптеры
- Направление зависимостей
- Неизменяемость и отсутствие состояния
- 12-факторные приложения
Вам не обязательно знать их все, потому что мы будем раскрывать смысл техник по ходу книги. Но будет хорошо, если вы имеете представление, в чём их польза и основной смысл.
Книг о рефакторинге много, зачем нужна ещё одна?
По большому счёту — ни зачем. Все принципы, техники и причины их появления описаны в других книгах и, скорее всего, гораздо более подробно, детально, логично и корректно.
Мне этот текст нужен в первую очередь самому:
- для систематизации того, что я знаю сам;
- для возможности сослаться на конкретное место при дискуссии о какой-то проблеме;
- для фиксации уровня знаний в конкретном моменте времени, чтобы понимать куда расти.
Но я подумал, что возможно, это может оказаться полезным кому-то ещё. Так этот проект и появился.
Footnotes
-
Доклад «Рефакторинг на максималках», https://bespoyasov.ru/talks/refactor-like-a-superhero/ ↩
-
Рефакторинг, Википедия, https://ru.wikipedia.org/wiki/Рефакторинг ↩