🎯 什麼情境該想到我

當你「發現同一個模組(或類別)常常因為好幾種完全不同的原因而被修改」的時候——例如加一種新產品要改它、換一個資料庫也要改它。

⚙️ 怎麼用(步驟 / 公式)

這味道是什麼徵兆:一段程式碼理想上「只因一種原因而改」。當你為了不同理由一次次回到同一個地方修改,代表它把多個不相關的職責(不同變化軸)混在一起了。這與「霰彈式修改」正好相反:發散是「一個模組、多種變化原因」。

通常用哪些重構手法對治:

  • 拆分階段(Split Phase):若這兩種原因對應處理流程的不同階段(如先解析、再計算),把它們切成前後兩段。
  • 搬移函式(Move Function):把處理不同原因的函式搬去各自合適的模組。
  • 提煉類別(Extract Class):把每一種變化原因各自封裝成一個類別。

目標:讓每個處理某一種變化的情境都集中在單一模組裡。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 拆分要基於「真的會各自獨立變化」的職責,別為了教條把本來內聚的東西硬拆散。
  • 若某種「變化原因」其實很少發生、也不複雜,維持現狀可能更簡單。

🔗 相關工具