如何通過程式碼庫的抽象分支以增量方式進行大規模更改 - Paul
團隊經常使用版本控制分支進行大規模更改,以便他們可以繼續開發功能並修復主線上的錯誤。
但是如果您的程式碼位於分支上,則它不能被整合的。
合併回主線肯定是痛苦的,痛苦的程度取決於你想要做出多大的改變,同時你在主線上做了多少工作。
這意味著推動您使用版本控制分支的力量越強,最終您必須合併時就越痛苦。如果您還使用分支作為功能,情況會變得更糟。
一般來說,將分支用於特性或大規模更改是一個壞主意,原因有幾個,其中最重要的是它會阻止持續交付和重構:Martin Fowler 有關於為什麼特性分支不好以及如何使用特性切換作為替代方法的優秀文章。
而抽象分支是一種在主線上逐步對應用程式進行大規模更改的模式。
Paul Hammant 在他關於這項技術的原始部落格文章中提供的示例是從 Hibernate 遷移到 iBatis。
抽象分支涉及以增量方式對系統進行大規模更改,如下所示:
- 在需要更改的系統部分上建立抽象。
- 重構系統的其餘部分以使用抽象層。
- 在新實現中建立新類,並根據需要讓抽象層委託給舊類或新類。
- 刪除舊的實現。
- 沖洗並重復前兩個步驟,如果需要,同時運送您的系統。
- 一旦舊實現被完全替換,您可以根據需要移除抽象層。
Martin Fowler 指出這些步驟的變化是可能的:
“在最簡單的情況下,您構建整個抽象層,重構所有內容以使用它,構建新的實現,然後輕按開關。但是有多種方法可以分解它。您可能不會構建整個抽象層,只是功能的一個子集,遷移它然後再做一大堆功能(提供新舊可以共存。)否則您可能會將一些呼叫程式碼轉移到抽象上並實現兩者在你移動其餘部分之前的方法。”
相關文章
- 程式碼分支規範
- 如何通過CRM進行遠端支援?
- 使用Grail進行大規模基礎設施管理AI
- 程式碼分支及版本管理規範
- 使用 JGit 來實現 master 分支和 feature 分支之間的程式碼比對並獲取增量程式碼GitAST
- Facebook 是如何做大規模程式碼部署的
- 無需debug,通過抽象模型快速梳理程式碼核心流程抽象模型
- 如何透過分解和增量更改將單體遷移到微服務?微服務
- 資料分析-以最小顆粒的方式進行
- 使用colmap對大規模場景進行分組重建
- GraalVM 21.0提供執行Java程式碼的第三種方式:Espresso通過Truffle框架執行Java程式碼 - graalvmLVMJavaEspresso框架
- 通過一個模擬程式讓你明白ASP.NET MVC是如何執行的ASP.NETMVC
- 通過串列埠進行通訊 :串列埠
- Git 如何同步上游分支程式碼?Git
- Redis 通過 RDB 方式進行資料備份與還原Redis
- 通過crontab更改DataGuard物理庫managed recover狀態
- 通過容器化技術RestCloud ETL支援大規模的分散式部署架構RESTCloud分散式架構
- 通過SPA方式在Lugz0庫抓取SQL指令碼SQL指令碼
- 利用Python中的mock庫對Python程式碼進行模擬測試PythonMock
- 使用 Eager Execution 編碼並執行圖表:以通過 RevNet 優化程式碼為例優化
- 通過Python掃描程式碼關鍵字並進行預警Python
- 谷歌程式碼庫已超過 20 億行程式碼,他們是如何管理的?谷歌行程
- "redirect:/news/to"; springmvc的方式通過後臺來進行重定向目錄SpringMVC
- 利用 AutoML 進行大規模影象分類和物件檢測TOML物件
- 通過Z-Order技術加速Hudi大規模資料集分析方案
- 通過qq進行ip定位
- 目前的低程式碼開發平臺市場規模如何?
- 如何通過指令碼匯入master 庫中的user資訊指令碼AST
- 通報:Confluence遠端程式碼執行漏洞(CVE-2021-26084)被黑產大規模利用
- 如何透過連線資料庫的方式對線下應用進行線上擴充套件資料庫套件
- linux 的程式碼規模有多大?Linux
- 將圖片以灰色方式顯示的程式碼
- 程式碼抽象的思考抽象
- 歸檔路徑更改後,如何對資料庫進行恢復(轉)資料庫
- Mac系統如何通過自帶的工具進行磁碟修復Mac
- 如何通過rownum對錶的不同範圍進行批量更新update
- 通過規模化Scrum創造最新技術的印表機Scrum
- Oracle通過rman進行克隆,你知道如何做嗎?Oracle