Anton Sidorov homepage

Bookmark this to keep an eye on my project updates!

Follow me on GitHub

Рефакторинг кода

Паттерны распила монолита на 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 иплементации
  • Прокси для трансформации форматов АПИ Sidecar
  • Monorepo