Strangler重写模式


来自Martin Fowler推荐的模式,这是描述重写一个重要系统的方法,Strangler是一种渐进的重写模式,而不是一刀切全部重写发布新版本:

当Cindy和我去澳大利亚时,我们在昆士兰海岸的雨林中度过了一段时间。这个地区的自然奇观之一是巨大的Strangler藤蔓。它们生长在无花果树的上部分树枝,会逐渐沿着树木向下移动,直到它们在土壤中生根,多年来,他们成长为奇妙而美丽的形状,同时扼杀和杀死它们寄生的主人树。

我的职业生涯大部分都涉及系统的重写。你会认为这样的事情很容易 ,然而,它们总是比它们表面上复杂得多,而且充满了风险,交付日期迫在眉睫,压力仍然存在。虽然新功能(总有新功能)很受欢迎,但旧功能必须保留。甚至经常需要将旧错误添加到重写的系统中。

另一种方法是逐步在旧的边缘创建一个新系统,让它在几年内缓慢增长,直到旧系统被勒死(Strangler的意思是扼杀勒死)。

这样做听起来很难,但我越来越认为这是运作良好的基本策略。

我的同事克里斯史蒂文森 最近参与了一个项目,取得了很大的成功。他们在XP 2004上发表了关于此的第一篇论文,我希望能有更多描述这个项目的更多方面。它们尚未处于旧应用程序被勒死的程度 - 但它们为业务提供了有价值的功能,使团队更有信心。即使他们现在停止,他们也有巨大的投资回报 - 这比许多切换重写都要多。

考虑Strangler模式而不是一刀切的重写的最重要原因是降低了风险。Strangler可以稳定地提供价值,频繁的发布使您可以更仔细地监控其进度。许多人仍然不采用Strangler,因为他们认为会花费更多 - 我不相信这一点。由于您可以使用较短的发布周期,因此可以避免许多不必要的功能,这些功能可以减少重写次数。

这里有另一个重要的想法 - 在设计新应用程序时,您应该设计它以便在将来更容易被勒死。让我们面对现实,我们所做的就是今天编写明天的遗留软件。通过让将来很容易被勒死,你可以让今天的工作更加优雅。