Strangler重寫模式
來自Martin Fowler推薦的模式,這是描述重寫一個重要系統的方法,Strangler是一種漸進的重寫模式,而不是一刀切全部重寫釋出新版本:
當Cindy和我去澳大利亞時,我們在昆士蘭海岸的雨林中度過了一段時間。這個地區的自然奇觀之一是巨大的Strangler藤蔓。它們生長在無花果樹的上部分樹枝,會逐漸沿著樹木向下移動,直到它們在土壤中生根,多年來,他們成長為奇妙而美麗的形狀,同時扼殺和殺死它們寄生的主人樹。
我的職業生涯大部分都涉及系統的重寫。你會認為這樣的事情很容易 ,然而,它們總是比它們表面上複雜得多,而且充滿了風險,交付日期迫在眉睫,壓力仍然存在。雖然新功能(總有新功能)很受歡迎,但舊功能必須保留。甚至經常需要將舊錯誤新增到重寫的系統中。
另一種方法是逐步在舊的邊緣建立一個新系統,讓它在幾年內緩慢增長,直到舊系統被勒死(Strangler的意思是扼殺勒死)。
這樣做聽起來很難,但我越來越認為這是運作良好的基本策略。
我的同事克里斯史蒂文森 最近參與了一個專案,取得了很大的成功。他們在XP 2004上發表了關於此的第一篇論文,我希望能有更多描述這個專案的更多方面。它們尚未處於舊應用程式被勒死的程度 - 但它們為業務提供了有價值的功能,使團隊更有信心。即使他們現在停止,他們也有巨大的投資回報 - 這比許多切換重寫都要多。
考慮Strangler模式而不是一刀切的重寫的最重要原因是降低了風險。Strangler可以穩定地提供價值,頻繁的釋出使您可以更仔細地監控其進度。許多人仍然不採用Strangler,因為他們認為會花費更多 - 我不相信這一點。由於您可以使用較短的釋出週期,因此可以避免許多不必要的功能,這些功能可以減少重寫次數。
這裡有另一個重要的想法 - 在設計新應用程式時,您應該設計它以便在將來更容易被勒死。讓我們面對現實,我們所做的就是今天編寫明天的遺留軟體。透過讓將來很容易被勒死,你可以讓今天的工作更加優雅。
相關文章
- Shopify如何使用Strangler Fig模式重構遺留程式碼中上帝式大物件?- Adrianna Chang模式物件
- TypeScript重寫設計模式庫的搭建TypeScript設計模式
- 使用策略模式和簡單工廠模式重寫支付模組模式
- 使用策略模式和簡單工廠模式重寫支付模組(二)-優化$request模式優化
- 重寫Reddit
- 方法重寫
- 使用策略模式和簡單工廠模式重寫支付模組(二)-最佳化$request模式
- 為什麼重寫equals必須重寫hashCode
- 重寫ThreadPoolTaskExecutorthread
- hashcode重寫
- nginx url重寫Nginx
- 查詢重寫
- Nginx 重寫URINginx
- C++重寫C++
- 重構與模式模式
- 重寫equals()方法時,需要同時重寫hashCode()方法
- 重學設計模式-單例模式設計模式單例
- java 中為什麼重寫 equals 後需要重寫 hashCodeJava
- 微軟的坑:Url重寫竟然會引起IIS核心模式快取不工作微軟模式快取
- 方法重寫(Override)IDE
- java -繼承 -重寫Java繼承
- java 方法重寫概念Java
- 重寫返回鍵(Fragment)Fragment
- 重寫MM入門
- 重構 - 觀察者模式模式
- 建議重寫equals方法時也一併重寫hashCode方法
- Java重寫equals方法時為什麼要重寫hashcode方法Java
- 編寫可測試的Javascript程式碼(2):從反模式進行重構JavaScript模式
- 為什麼重寫 equals() 方法,一定要重寫 hashCode() 呢?| HashMapHashMap
- 如何 把下面這個url 重寫 用response 重寫到請求中...
- HDFS讀寫流程(重點)
- 如何禁止JavaScript物件重寫?JavaScript物件
- Nginx實現URL重寫Nginx
- 重寫遵循的原則
- TreeSet重寫Comparator排序排序
- URL 重寫新手指南
- Rewrite重寫教程前言
- iOS 重寫cell的FrameiOS