Рефакторинг кода
Паттерны распила монолита на MSA
Зачем
Часть рефакторинга монолита.
- Рефакторинг - это процесс улучшения структуры кода без изменения его поведения.
- Большинство инженерных проблем возникает из-за беспорядка, который мы имеем в коде.
- Writing code is very simple, but writing simple code is the hardest thing there is.
- Написание чистого кода и поддержание его чистоты возможно только путем практики непрерывного рефакторинга.
Цель:
- simplify design
- improve namings
- identify and remove code smells
- use design patterns for common problems
- improve testability and maintainability
Ошибки:
- Нет тестов: Test-Driven Development (TDD)
- Изменение поведения при рефакторинге
Паттерны
- Слои приложения разделить: UI-BLL-DAL
- Выявить зависимости между ФБ
- Выносить Вышестоящие ФБ первыми без зависимостей от Нижестоящих (внешние вызовы). Паттерн “Фикус-удавка” (strangler fig app) - параллельная функциональность с маршрутизацией запросов
- Состояние (БД) вынести и возможно потребуется обратно его обновлять
- Возможность переключения-отката: монолит-сервис - Ограничение: если изменения функционала происходят в сервисе, откат затрудняется, требуется синхронизировать и монолит. В идеале фриз измненений.
- Иначе (не рекомендуется) выносить Нижестоящие ФБ с зависимостями от Вышестоящих (внутренние вызовы). Паттерн “Ветвление по абстракции” (branch by abstraction)
- Монолит переключается на абстракцию
- Имплементация абстракции AS-IS
- Имплементация абстракции адаптера TO-BE к новому сервису
- Переключение на TO-BE имплементацию
- Тестирование, Rollback если фриз измненений
- Удаление AS-IS иплементации
- Выносить Вышестоящие ФБ первыми без зависимостей от Нижестоящих (внешние вызовы). Паттерн “Фикус-удавка” (strangler fig app) - параллельная функциональность с маршрутизацией запросов
- Прокси для трансформации форматов АПИ Sidecar
- Monorepo