如何通過程式碼庫的抽象分支以增量方式進行大規模更改 - Paul

banq發表於2022-03-11

團隊經常使用版本控制分支進行大規模更改,以便他們可以繼續開發功能並修復主線上的錯誤。

但是如果您的程式碼位於分支上,則它不能被整合的。

合併回主線肯定是痛苦的,痛苦的程度取決於你想要做出多大的改變,同時你在主線上做了多少工作。

這意味著推動您使用版本控制分支的力量越強,最終您必須合併時就越痛苦。如果您還使用分支作為功能,情況會變得更糟。

一般來說,將分支用於特性或大規模更改是一個壞主意,原因有幾個,其中最重要的是它會阻止持續交付和重構:Martin Fowler 有關於為什麼特性分支不好以及如何使用特性切換作為替代方法的優秀文章。

而抽象分支是一種在主線上逐步對應用程式進行大規模更改的模式。

Paul Hammant 在他關於這項技術的原始部落格文章中提供的示例是從 Hibernate 遷移到 iBatis。

抽象分支涉及以增量方式對系統進行大規模更改,如下所示:

  1. 在需要更改的系統部分上建立抽象。
  2. 重構系統的其餘部分以使用抽象層。
  3. 在新實現中建立新類,並根據需要讓抽象層委託給舊類或新類。
  4. 刪除舊的實現。
  5. 沖洗並重復前兩個步驟,如果需要,同時運送您的系統。
  6. 一旦舊實現被完全替換,您可以根據需要移除抽象層。

Martin Fowler 指出這些步驟的變化是可能的:

“在最簡單的情況下,您構建整個抽象層,重構所有內容以使用它,構建新的實現,然後輕按開關。但是有多種方法可以分解它。您可能不會構建整個抽象層,只是功能的一個子集,遷移它然後再做一大堆功能(提供新舊可以共存。)否則您可能會將一些呼叫程式碼轉移到抽象上並實現兩者在你移動其餘部分之前的方法。”

 

相關文章