Антишахматы в коде: как избежать лавины кода и рефакторинга

Антишахматы и лавина кода

Распространенный антипаттерн — «антишахматы»: почти полезные действия, требующие комментирования одних участков кода и дописывания других. Без рефакторинга это приводит к большим закомментированным блокам, сложным обходным путям и усложнению кодовой базы. Проблема усугубляется в больших командах или при работе с legacy-кодом, где сложно понять существующую структуру.

Часто встречается лавина кода, особенно в аутсорсинговых компаниях с общей кодовой базой для разных клиентов. Код обрастает отключаемыми участками и переопределениями, затрудняя поддержку и развитие. Симптомы: непонятные переменные, не относящиеся к задаче фрагменты кода, странное покрытие документацией и запутанная архитектура. Такой код сложно интегрировать в API-driven или domain-driven подходы.

Блоб (Blob)

Блоб — большой универсальный класс, выполняющий множество функций. Он возникает из-за неправильных архитектурных решений, спешки или последовательного добавления костылей. Блоб перестает быть объектно-ориентированным и усложняет поддержку и развитие проекта. Часто встречается в старых системах, например, в банковской сфере. Даже старые монолиты можно разделить на функции, упрощая поддержку и модификацию. Блоб — симптом более глубоких архитектурных проблем.

Непрерывное устаревание

Эта практика — постоянное внедрение новых технологий без необходимости. Частный случай — использование компонентов с прекращенной поддержкой, поддерживаемых только командой разработки. Это приводит к «смерти от старости» системы или необходимости полного переписывания.

Функциональная декомпозиция (неправильная)

Функциональная декомпозиция — разделение кода по частям бизнес-процесса, а не по функциональному уровню. Это приводит к дегенеративной архитектуре, где бизнес-логика смешивается с интерфейсной частью. Пример: запрос остатков вызывает подключение к веб-сервису, или сложение двух чисел формирует отчет. Такой подход усложняет понимание и поддержку кода. Часто встречается в проектах с большим количеством junior-разработчиков без опытного архитектора или при создании MVP, который неожиданно продолжает использоваться годами.

Лодочный якорь

Лодочный якорь — ненужный код, мешающий разработке. Он может появиться после слияния компаний или при получении кода без базы данных, с логикой, реализованной в базе данных. Такой код нужно удалить как можно быстрее.

Золотой молоток

«Золотой молоток» — использование привычных инструментов и технологий, даже если есть более подходящие решения. Это приводит к неэффективному использованию ресурсов и усложнению системы. Часто связано с необходимостью изучения новой технологии и оценки рисков.

Спагетти-код

Спагетти-код — скопление похожих фрагментов кода, разбросанных по разным модулям. Это ухудшает читаемость и поддержку кода.

Копипаста

Копипаста — использование фрагментов кода из интернета (Google, Stack Overflow, ChatGPT) без должного понимания. Это может сэкономить время, но часто приводит к некачественному и трудно поддерживаемому коду.

Грибы (Mash Management)

Mash Management — стиль управления с размытыми требованиями и непонятностью задачи. Это приводит к низкому качеству кода и проблемам на этапе тестирования.

Описанные антипаттерны следует избегать при разработке программного обеспечения. Знание этих антипаттернов помогает создавать более качественный, поддерживаемый и надежный код.

Что будем искать? Например,программа