「Strangler Application」という言葉は聞いたことがありませんでした。気に入っています。可能であれば、これは常に優れたアプローチであり、リスクを最小限に抑え、非常に実用的であり、大きな建物を少しずつ削っていきます.
私の経験ではそれがうまくいかないのは、合理的に重要な変更がすぐに必要な場合です。変更には少しのリファクタリング (または多くのハッキング) が必要です。そのような状況では、必要な変更が大きな泥の塊の中心にあり、汚れる以外に選択肢がないことに気付くことがよくありました。主要なリファクタリングが最良の選択肢でした。
そのような場合、私は分割統治法を採用します。私が常に目指している最初の目標は、テスト容易性です。それができれば、残りのすべてがはるかに簡単になります。実際、これは私が大きな泥の塊から離れてリファクタリングする主な要因の 1 つです。この種のコードはほとんどテスト不可能であることが多く、UI の入力と出力の例があることを願っていますが、それさえないこともあります。 .
そのため、すべてが UI にまとめられているコードに直面した場合、私は通常、個別の機能単位をクラスとメソッドに分解してから、コードのそれらの部分をドメインまたはサービス レイヤーにプッシュすることから始めます。少しずつ行うことで、何かが壊れる可能性が大幅に減少し、問題が発生したときに壊れたコードがどこにあったかを特定しやすくなります。
すべての変更の最後に利用可能なテスト ケースを実行し、何らかのベースラインを満たしていることを確認します。
適切な単体テストを書いていれば、問題の規模を縮小することができます。適切な単体テストを使用するか、少なくともまともなコードを作成できる適切なフレームワークを使用して、ストラングラー アプローチを採用することがすぐに実用的になることがわかりました。単体テストでは、機能の一部を徐々に置き換えることがはるかに実用的になります。