Integer & Zeyna
Привет, вот что я думала: как лучше переписать старый код, чтобы получилась чистая и эффективная структура, но при этом сохранить основную логику. Хотелось бы продумать план действий, чтобы убрать лишнее и улучшить производительность – как тебе идея?
Отлично. Сначала перечисли основные модули, потом выдели побочные эффекты, продумай чёткие интерфейсы, рефакторинг делай небольшими порциями, тесты запускай после каждого изменения. Держи изменения атомарными и не трогай изначальную логику, пока улучшаешь структуру.
Звучит как хороший план. Начнём с каталогизации основных модулей, а потом отметим все места, где код обращается к внешним сервисам или записывает данные на диск. Как только у нас будет такая карта, набросаем минимальные интерфейсы для каждого модуля, выделим побочные эффекты и будем разбираться с самыми запутанными по одному. После каждой небольшой правки запускай юнит-тесты, проверяй поведение и двигай дальше. Так логика сохранится, а структура станет более чёткой.
Понятно, какой план. Задокументируй модули, отметь внешние вызовы и ввод-вывод, а потом определи минимальные интерфейсы. Начни с самых запутанных частей, тестируй после каждой правки и не трогай основную логику. Будем делать пошагово.
Конечно, давай разложим всё по полочкам. Сначала перечисли все модули и запиши, какие внешние вызовы или работа с файлами они выполняют. Потом отметь эти побочные эффекты, набросай минимальные интерфейсы и начни с самых запутанных модулей. После каждого изменения запускай тесты, чтобы убедиться, что ничего не сломалось. Основную логику трогать не будем, а структуру подтянем.
Проверь репозиторий на предмет импортов и точек входа.
Составь таблицу: название модуля – список внешних вызовов или файловых операций.
Выдели модули с наибольшим количеством побочных эффектов.
Для каждого выделенного модуля разработай простой интерфейс:
• типы входных данных
• типы выходных данных
• контракт исключений.
Замени прямые внешние вызовы внедрением зависимостей или адаптерами.
Рефакторинг модуля на более мелкие, чистые функции, где это возможно.
Запусти юнит-тесты, проверь покрытие, убедись, что поведение сохранено.
Закоммить изменения и повтори процесс с другим сложным модулем.