甚麼是SOLID?
SOLID,是由Robert C. Martin等人提出的5個物件導向設計原則的英文字首組成,分別為單一職責(S)、開閉原則(O)、里氏替換(L)、介面隔離(I)以及依賴反轉(D)。SOLID提供程式開發者良好的設計指引,可以開發出易理解、易維護、易拓展的系統。
依賴反轉原則(Dependency Inversion Principle,DIP)
定義如下:
1. 高層次模組不應該依賴於低層次模組,兩者都應該依賴於抽象介面。
2. 抽象介面不應該依賴於具體實現。而具體實現則應該依賴於抽象介面。
依據DIP的定義,若高層次模組依賴低層次模組,會發生甚麼事?
- 當系統隨時間變得複雜時,不利於後續擴充。
- 當需求變更而需要換掉低層次的模組時,此時程式碼是不能重複利用的。
因此,需要將依賴反轉,由高層次模組提供一個通用的介面,讓低層次的模組去依賴,來達到解耦合的目的。
舉例
在工業控制上,光源控制器常見的連線方式有兩種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的運用符合介面隔離原則,以及開閉原則,也就是對於擴充是開放的,對於修改是封閉的。另外也可以結合運用工廠模式,在注入物件時,有個切換的功能。
發佈留言