在聊依賴反轉之前,先讓我們聊聊什麼是依賴,所謂的依賴就是一種「受到某個東西影響、牽制」的狀態。
例如說如果有個像我一樣的肥宅每天一定要來一片雞排才能療癒身心,那我就是依賴雞排;
同樣的,如果有個大叔不抽菸就會全身不舒服,就是對香菸有所依賴。
當有「必須要藉由某個人事物來達到目的」的狀況時,就是依賴。
而在程式設計裡面的概念也差不多,如果A模組直接受到B模組的影響,我們就稱A依賴了B,最明顯的狀況就是A模組需要藉由B模組的實例來完成某個功能的時候。
例如「匯出報表」功能建立了一個「Excel 控制類別」的實例以建立檔案;
或是「會員查詢」功能建立了一個「DB 連線」的實例來進入資料庫取得會員資料
遇見這種「必須要藉由某個模組的實例來完成想要的動作」的狀況時,就是依賴。
依賴與耦合
我們在之前的 耦合篇 提過,如果模組和另一個模組之間有關連,那這兩者之間就耦合。以此來看,依賴就是一種耦合的關係,那麼,依賴是健康還是不健康的耦合呢?
現在讓我們用 多型篇 用過的「老闆徵工程師」的例子來舉例一下:現在有間小小公司,老闆請來了小明當工程師,並請他開工撰寫產品程式碼。
當「撰寫產品程式」對「工程師」直接依賴的時候,狀況可能是這樣的:
public Product Work()
{
Ming programmer = new Ming();
var product = programmer.Programming();
return product;
}
過一陣子,老闆發現小明寫出來的東西似乎不太行,於是把小明趕走,另外請了小華。這時候因為「工程師」這個實作類別不一樣了,我們就必須要改一次程式碼:
public Product Work()
{
Hua programmer = new Hua();
var product = programmer.Programming();
return product;
}
……