legacy-modernizer

legacy-modernizer

熱門

設計漸進式遷移策略、識別服務邊界、產出依賴圖與遷移藍圖,並為老舊程式碼庫生成 API 外觀設計。適用於現代化遺留系統、實作絞殺藤模式或分支抽象化、拆分單體架構、升級框架或語言,或在不影響業務營運的情況下減少技術債。

1.1萬星標
979分支
更新於 2026/5/20
SKILL.md
唯讀
名稱
legacy-modernizer
描述

設計漸進式遷移策略、識別服務邊界、產出依賴圖與遷移藍圖,並為老舊程式碼庫生成 API 外觀設計。適用於現代化遺留系統、實作絞殺藤模式或分支抽象化、拆分單體架構、升級框架或語言,或在不影響業務營運的情況下減少技術債。

Legacy Modernizer

核心工作流程

  1. 評估系統 — 分析程式碼庫、依賴關係、風險與業務限制。在進行下一步前產出依賴圖與風險清單。

    • 驗證檢查點: 確認所有外部整合與資料合約均已記錄,再進入步驟 2。
  2. 規劃遷移 — 設計漸進式藍圖,每個階段需有明確的復原策略。參考 references/system-assessment.md 取得程式碼分析範本。

    • 驗證檢查點: 確認每個階段都有定義的復原觸發條件與負責人。
  3. 建立安全網 — 在接觸正式環境程式碼前,建立特徵測試與監控。目標覆蓋現有行為 80% 以上。

    • 驗證檢查點: 執行特徵測試套件,確認在未修改的遺留系統上通過綠燈後再繼續。
  4. 漸進式遷移 — 使用功能開關套用絞殺藤模式。透過外觀層路由流量;逐步轉移負載。

    • 驗證檢查點: 每次流量增加後(例如 5% → 25% → 50% → 100%),確認錯誤率與延遲指標仍維持在基線門檻內。
  5. 驗證與迭代 — 執行完整測試套件、檢視監控儀表板,並在淘汰遺留程式碼前確認業務行為保持一致。

    • 驗證檢查點: 新程式碼必須在 100% 流量下穩定運作至少一個發行週期,才能移除遺留路徑。

參考指南

根據情境載入詳細指引:

主題 參考文件 載入時機
絞殺藤 references/strangler-fig-pattern.md 漸進式取代、外觀層、路由
重構 references/refactoring-patterns.md 抽取服務、分支抽象化、配接器
遷移 references/migration-strategies.md 資料庫、UI、API、框架遷移
測試 references/legacy-testing.md 特徵測試、黃金主檔、核准測試
評估 references/system-assessment.md 程式碼分析、依賴對應、風險評估

程式碼範例

絞殺藤外觀層 (Python)

# facade.py — 根據功能開關將請求路由至遺留或新服務
import os
from legacy_service import LegacyOrderService
from new_service import NewOrderService

class OrderServiceFacade:
    def __init__(self):
        self._legacy = LegacyOrderService()
        self._new = NewOrderService()

    def get_order(self, order_id: str):
        if os.getenv("USE_NEW_ORDER_SERVICE", "false").lower() == "true":
            return self._new.fetch(order_id)
        return self._legacy.get(order_id)

功能開關包裝器

# feature_flags.py — 環境變數或設定檔開關的簡易包裝
import os

def flag_enabled(flag_name: str, default: bool = False) -> bool:
    """檢查遷移功能開關是否啟用。"""
    return os.getenv(flag_name, str(default)).lower() == "true"

# 使用方式
if flag_enabled("USE_NEW_PAYMENT_GATEWAY"):
    result = new_gateway.charge(order)
else:
    result = legacy_gateway.charge(order)

特徵測試範本 (pytest)

# test_characterization_orders.py
# 將現有遺留行為擷取為黃金主檔安全網。
import pytest
from legacy_service import LegacyOrderService

service = LegacyOrderService()

@pytest.mark.parametrize("order_id,expected_status", [
    ("ORD-001", "SHIPPED"),
    ("ORD-002", "PENDING"),
    ("ORD-003", "CANCELLED"),
])
def test_order_status_golden_master(order_id, expected_status):
    """若遺留行為意外變更則大聲失敗。"""
    result = service.get(order_id)
    assert result["status"] == expected_status, (
        f"特徵測試失敗於 {order_id}: "
        f"預期 {expected_status},實際得到 {result['status']}"
    )

限制

必須執行

  • 所有遷移過程中維持零生產中斷
  • 重構前建立全面的測試覆蓋率(目標 80% 以上)
  • 所有漸進式上線使用功能開關
  • 實作監控與復原程序
  • 記錄所有遷移決策與理由
  • 保留現有業務邏輯與行為
  • 透明溝通進度與風險

禁止事項

  • 大爆炸式重寫或取代
  • 變更前跳過遺留行為測試
  • 無復原能力即部署
  • 破壞現有整合或 API
  • 在新程式碼中忽略技術債
  • 未經適當驗證即倉促遷移
  • 在新程式碼驗證前移除遺留程式碼

輸出範本

實作現代化時,提供:

  1. 評估摘要(風險、依賴、方法)
  2. 遷移計畫(階段、復原策略、指標)
  3. 實作程式碼(外觀層、配接器、新服務)
  4. 測試覆蓋率(特徵測試、整合測試、端到端測試)
  5. 監控設定(指標、警示、儀表板)

知識參考

絞殺藤模式、分支抽象化、特徵測試、漸進式遷移、功能開關、金絲雀部署、API 版本管理、資料庫重構、微服務抽取、技術債減少、零停機部署

文件