October 7

Пример использования strangler-паттерна

Исходная ситуация - есть большая legacy система, которая совмещает в себе множество контекстов. Конечные системы и бэкенд сервисы взаимодействуют с этой legacy системой. В наших планах - избавиться от legacy системы и вынести её функционал в несколько небольших современных мастер-систем.

Исходное состояние

Первый шаг - выставить фасад между legacy системой и бэкенд сервисами, которые используют её. Всё взаимодействие с legacy системой должно быть только через фасад.

Первый шаг - использование фасада

Второй шаг - часть функционала legacy системы переезжает в современные мастер-системы. Фасад ссылается и на legacy систему, и на новые мастер-системы. При этом для потребителей - бэкенд сервисов, всё остаётся также как было. Они по-прежнему взаимодействуют с фасадом.

Второй шаг - постепенный переход на новые мастер-системы

Третий шаг - постепенный переход на современные мастер-системы. По итогу - мы полностью отказываемся от старой legacy системы, заменяя её несколько мастер-системами.

Четвёртый шаг - полный переход на современные мастер-системы

По итогу - бэкенд сервисы, которые взаимодействуют с legacy системой должны будут лишь 1 раз поменять своё взаимодействие - перейти на использование фасада. После этого, для них ничего не будет меняться. Вся тяжесть перехода ляжет лишь на команду, которая разрабатывает фасад. Мы инкапсулируем изменения только в одном модуле.