如何通過程式碼庫的抽象分支以增量方式進行大規模更改 - Paul
團隊經常使用版本控制分支進行大規模更改,以便他們可以繼續開發功能並修復主線上的錯誤。
但是如果您的程式碼位於分支上,則它不能被整合的。
合併回主線肯定是痛苦的,痛苦的程度取決於你想要做出多大的改變,同時你在主線上做了多少工作。
這意味著推動您使用版本控制分支的力量越強,最終您必須合併時就越痛苦。如果您還使用分支作為功能,情況會變得更糟。
一般來說,將分支用於特性或大規模更改是一個壞主意,原因有幾個,其中最重要的是它會阻止持續交付和重構:Martin Fowler 有關於為什麼特性分支不好以及如何使用特性切換作為替代方法的優秀文章。
而抽象分支是一種在主線上逐步對應用程式進行大規模更改的模式。
Paul Hammant 在他關於這項技術的原始部落格文章中提供的示例是從 Hibernate 遷移到 iBatis。
抽象分支涉及以增量方式對系統進行大規模更改,如下所示:
- 在需要更改的系統部分上建立抽象。
- 重構系統的其餘部分以使用抽象層。
- 在新實現中建立新類,並根據需要讓抽象層委託給舊類或新類。
- 刪除舊的實現。
- 沖洗並重復前兩個步驟,如果需要,同時運送您的系統。
- 一旦舊實現被完全替換,您可以根據需要移除抽象層。
Martin Fowler 指出這些步驟的變化是可能的:
“在最簡單的情況下,您構建整個抽象層,重構所有內容以使用它,構建新的實現,然後輕按開關。但是有多種方法可以分解它。您可能不會構建整個抽象層,只是功能的一個子集,遷移它然後再做一大堆功能(提供新舊可以共存。)否則您可能會將一些呼叫程式碼轉移到抽象上並實現兩者在你移動其餘部分之前的方法。”
相關文章
- 程式碼分支規範
- 使用 JGit 來實現 master 分支和 feature 分支之間的程式碼比對並獲取增量程式碼GitAST
- 無需debug,通過抽象模型快速梳理程式碼核心流程抽象模型
- 通報:Confluence遠端程式碼執行漏洞(CVE-2021-26084)被黑產大規模利用
- GraalVM 21.0提供執行Java程式碼的第三種方式:Espresso通過Truffle框架執行Java程式碼 - graalvmLVMJavaEspresso框架
- 如何透過分解和增量更改將單體遷移到微服務?微服務
- 如何通過CRM進行遠端支援?
- 通過Python掃描程式碼關鍵字並進行預警Python
- 使用 Eager Execution 編碼並執行圖表:以通過 RevNet 優化程式碼為例優化
- 通過 Spring 框架如何進行JDBC操作呢?Spring框架JDBC
- 如何通過相對規模來估算使用者故事?
- 資料分析-以最小顆粒的方式進行
- 如何準備一場演講--以正確的方式製作幻燈片,進行更有效的溝通。
- Git 如何同步上游分支程式碼?Git
- 使用Grail進行大規模基礎設施管理AI
- Redis 通過 RDB 方式進行資料備份與還原Redis
- 通過串列埠進行通訊 :串列埠
- 活動回放 | 如何進行全增量一體的異構資料庫實時同步資料庫
- 前端程式碼你是如何做抽象的?前端抽象
- 使用colmap對大規模場景進行分組重建
- linux 的程式碼規模有多大?Linux
- Git同步兩個遠端倉庫的分支程式碼Git
- 如何使用不同的方式更改 Linux 使用者密碼Linux密碼
- 通過容器化技術RestCloud ETL支援大規模的分散式部署架構RESTCloud分散式架構
- 通過qq進行ip定位
- 歸檔路徑更改後,如何對資料庫進行恢復(轉)資料庫
- 通過行為引數化傳遞程式碼
- 如何透過連線資料庫的方式對線下應用進行線上擴充套件資料庫套件
- MQTT協議 - arduino ESP32 通過精靈一號 MQTT Broker 進行通訊的程式碼詳解MQQT協議UI
- 如何對 ABAP 資料庫表透過 ABAP 程式碼進行更新和刪除操作試讀版資料庫
- 目前的低程式碼開發平臺市場規模如何?
- Mac系統如何通過自帶的工具進行磁碟修復Mac
- [求指導] 如何通過程式碼分析一個查詢語句的執行效率
- 透過AIOps進行網路管理的常用方式AI
- 通過Z-Order技術加速Hudi大規模資料集分析方案
- Oracle通過rman進行克隆,你知道如何做嗎?Oracle
- 一行程式碼將SAP CDS view資料以ALV的方式輸出行程View
- 通過Rxjs五行程式碼實現EventBusJS行程