🎯 什麼情境該想到我
當你「要整合一個外部系統、遺留系統或第三方 API,但不想讓它那套(可能很糟或跟你格格不入的)模型滲進來污染你乾淨的領域模型」的時候。你想在中間加一層翻譯把它擋在外面。
⚙️ 怎麼用(步驟 / 公式)
意圖:在下游與上游之間建立一層隔離+翻譯層,把上游的模型轉換成下游自己的模型。上游的概念與變動被擋在這層之外,保護內部模型的純淨與穩定。
做法要點:
- 定義你自己的內部模型與介面(你「想要」的樣子),與上游脫鉤。
- 在邊界建立翻譯層,將上游的資料/概念雙向轉換成內部模型(常用 Facade/Adapter,必要時搭配 Service)。
- 內部程式只跟自己的模型與這層介面打交道,絕不直接依賴上游型別。
- 上游一變,只改翻譯層這一處,內部模型不受波及。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 翻譯層要花額外開發與維護成本;若上游模型本來就乾淨又契合,追隨者可能更划算。
- 這是防禦性投資,回報在「上游多變或很糟」時才明顯;上游穩定良好時可能過度設計。
- 翻譯邏輯若做得太厚重,本身也可能變成難維護的一坨,要控制它的複雜度。
🔗 相關工具
- 追隨者 Conformist(相反選擇:不隔離、直接順從上游)
- 開放主機服務 Open Host Service(上游側對應的做法,主動提供乾淨協定)
- 客戶-供應商 Customer-Supplier(上游願意配合時可減少對防腐層的依賴)
- 領域驅動設計