Я никогда не слышал о терминах «Приложение Strangler» - мне это нравится. Там, где это возможно, это всегда было бы хорошим подходом, это, безусловно, сводит к минимуму риск и довольно прагматично, отрываясь от большого здания по частям.
В тех случаях, когда это не работает в моем опыте, здесь требуются разумные существенные изменения - изменения, которые потребуют немного рефакторинга (или много взлома). В этой ситуации я часто обнаружил, что изменения, которые я должен был сделать, были в центре большого шара грязи, и не было никакого выбора, кроме как стать грязным - даже то, что должно было быть стандартным обслуживанием или незначительными изменениями в улучшении, было просто ужасно и основным ректором был лучший вариант.
В этих случаях я бы пошел с разделом и победой - первая цель, к которой я всегда стремилась, - это возможность проверки, как только у вас есть, что все остальное намного проще. На самом деле, это часто является одним из основных драйверов, которые у меня есть для рефакторинга вдали от большого шара грязи. Такой код часто очень не поддается тестированию, надеюсь, что есть пример входов и выходов пользовательского интерфейса, но иногда даже это отсутствует ,
Так что, столкнувшись с кодом, где все сосредоточено в пользовательском интерфейсе, я обычно начинаю с факторинга дискретных единиц функциональности в классы и методы, а затем перетаскивая эти части кода в домен или уровень обслуживания. Выполнение этого поэтапно значительно снижает вероятность взлома чего-то и упрощает привязку к месту, где был взломан код, когда все идет не так.
Выполняйте все тестовые примеры, которые у вас есть в конце каждого изменения, и убедитесь, что вы все еще встречаете какую-то базовую линию.
Если вы пишете хорошие модульные тесты, вы можете начать уменьшать масштаб проблемы, и я обнаружил, что в ближайшее время становится практичным принимать подход душителя - с достойными модульными тестами или, по крайней мере, с правильной структурой, позволяющей при написании достойных модульных тестов становится намного практичнее постепенно заменять части функциональности.