Dependency Injection
依賴注入
01你是不是遇到這個 / THE SYMPTOM
我的函式裡面直接 new 一個資料庫連線、或直接呼叫某個寫死的服務,結果寫測試時根本沒辦法換成假的,每次測試都會真的去打資料庫。
↑ 如果你點頭了,你要的關鍵字就是 Dependency Injection。
02這是什麼 / DEFINITION
一種設計手法:一個模組需要用到的外部東西(資料庫、API client、設定)不在內部自己建立,而是從外面當參數「傳進去」,讓使用者決定要給哪一個。
03什麼時候用 / WHEN TO USE
當你想讓程式好測試、好替換實作(例如測試時換成假的、正式環境換成真的),或想解除模組對特定實作的硬綁定時使用。
04怎麼跟 AI 說 / HOW TO ASK
直接複製這句、貼進 Claude Code / Cursor / Copilot / ChatGPT:
這個 service 內部自己 new 了資料庫 client,請改成用依賴注入(dependency injection),把 client 當建構子參數傳進來,方便我之後傳 mock 進去測試。
05常見坑 / WATCH OUT
⚠ DI 不等於要裝一個龐大的「DI 框架/容器」——最簡單的依賴注入就是把東西當函式參數傳進去而已。容易和 inversion of control(控制反轉)混淆:IoC 是大方向概念,DI 是其中一種具體做法。
06相關的詞 / RELATED