🎯 什麼情境該想到我
當你「每加一個新功能/新類型,就得回頭改一堆既有程式(還常改壞)」,或 if-else/switch 越加越長時。
⚙️ 怎麼用
對擴充開放,對修改關閉:新增行為靠「加新程式」,而不是「改舊程式」。
- 找出會不斷新增類型/行為的變化點。
- 抽成介面,讓既有流程依賴介面(見 工具-針對介面編程)。
- 新增功能=新增一個實作類別,既有程式碼不動。
- 例:新增付款方式=加一個
PaymentMethod實作,不改結帳流程。
- 例:新增付款方式=加一個
🧪 我實際套用的紀錄
- 2026-07-14:(待填)
⚠️ 注意
- 不可能對「所有」變化都開放;只針對你判斷會反覆變的軸線設計(見 工具-封裝變化點),否則過度設計。
🔗 相關工具
- 工具-封裝變化點 —— 前置動作,先找出哪裡會變,才知道該對什麼開放擴充
- 工具-針對介面編程 —— 實作手段,靠介面把新舊實作隔開,加新的才不必改舊的
- 工具-好萊塢原則與依賴反轉 —— 架構層放大版,把依賴方向反轉過來,高層就不受低層變動影響