首頁 » 物件導向 » [SOLID原則(五)] 依賴反轉原則(DIP)

[SOLID原則(五)] 依賴反轉原則(DIP)

作者:

分類:

甚麼是SOLID?

SOLID,是由Robert C. Martin等人提出的5個物件導向設計原則的英文字首組成,分別為單一職責(S)開閉原則(O)里氏替換(L)介面隔離(I)以及依賴反轉(D)。SOLID提供程式開發者良好的設計指引,可以開發出易理解、易維護、易拓展的系統。

依賴反轉原則(Dependency Inversion Principle,DIP)

定義如下:

1. 高層次模組不應該依賴於低層次模組,兩者都應該依賴於抽象介面
2. 抽象介面不應該依賴於具體實現。而具體實現則應該依賴於抽象介面

依據DIP的定義,若高層次模組依賴低層次模組,會發生甚麼事?

  1. 當系統隨時間變得複雜時,不利於後續擴充
  2. 當需求變更而需要換掉低層次的模組時,此時程式碼是不能重複利用的

因此,需要將依賴反轉,由高層次模組提供一個通用的介面,讓低層次的模組去依賴,來達到解耦合的目的。

舉例

在工業控制上,光源控制器常見的連線方式有兩種RS232、Ethernet,若沒有運用依賴反轉,將會看到把兩種通訊控制寫在一起的神奇程式碼…

//由內部切換兩種通訊控制
class Controller
{
    private SerialPort comport;
    private Socket net;

    public void Connect()
    {
        if (IsComport)
            comport.Connect();
        else
            net.Connect();
    }
}

當依賴反轉後,只需要掛上IConnector去實作對應的方法即可。

interface IConnector
{
    void Connect();
    void Disconnect();
}

class Controller
{
    IConnector conn;
    public Controller(IConnector c) //注入
}

class ConnectSerialPort : IConnector { }
class ConnectEthernet : IConnector { }

結論

DIP的運用符合介面隔離原則,以及開閉原則,也就是對於擴充是開放的,對於修改是封閉的。另外也可以結合運用工廠模式,在注入物件時,有個切換的功能。

參考資料

「cian」的個人頭像

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *