SOLID原則:依賴反轉原則(Dependency Inversion Principle)
依賴反轉原則
類別之間的依賴盡量以Interface的方式進行溝通,應該減少類別的直接依賴。這樣可以減少修改幅度。
依賴反轉原則(Dependency inversion
principle,DIP)是指一種特定的解耦(傳統的依賴關係建立在高層次上,而具體的策略設定則應用在低層次的模組上)形式,使得高層次的模組不依賴於低層次的模組的實現細節,依賴關係被顛倒(反轉),從而使得低層次模組依賴於高層次模組的需求抽象。
該原則規定:
- 高層次的模組不應該依賴於低層次的模組,兩者都應該依賴於抽象介面。
- 抽象介面不應該依賴於具體實現。而具體實現則應該依賴於抽象介面。
穩定的介面
介面的改變會影響到實作,反之,對於修改實作不一定會去修改介面。甚至都不要去修改介面,因此介面比實作穩定。
舉例如下:
1 | public class OrderService |
對於這樣的程式碼 OrderService.cs 直接依賴 OrderRepository.cs,容易導致OrderRepository.cs
的修改直接影響到OrderService.cs。尤其是當OrderRepository.cs的實作有調整時,會造成OrderService.cs
的修改。在需求異動時,我們應該以最少的修改完成需求。
我們應該可以把OrderRepository抽取介面,並依賴介面。
建立 IOrderRepository.cs
1 |
|
讓 OrderRepository.cs 實作 IOrderRepository.cs
1 | public class OrderRepository : IOrderRepository |
OrderService.cs 直接依賴 IOrderRepository.cs 而不直接依賴 OrderRepository.cs
總結
在類別層次上,符合依賴反轉原則的設計需要透過抽象化來定義穩定的介面,讓高層類別依賴於介面,而不是依賴於具體的低層類別。這樣可以降低高層組件對低層組件的依賴程度,並且使得系統更容易進行修改和擴展。
在架構層次上,依賴反轉原則要求將系統中的依賴關係建立在抽象的邊界上。這意味著不同的組件應該依賴於抽象的介面或類別,而不是具體的實現細節。透過定義穩定的介面和抽象層次,不同組件之間的依賴關係可以更加清晰和靈活,並且可以簡化組件之間的協作和整合。
當所有的類別都依賴於穩定的介面時,依賴反轉原則提供了一個架構上的邊界,並且定義了新的依賴規則。這樣的依賴規則使得高層組件和低層組件之間的依賴關係變得清晰和可管理,提高了系統的彈性和可擴展性。
因此,依賴反轉原則在類別層次和架構層次上都非常重要,它的目的都是解耦合系統的不同組件,建立抽象的介面和層次,提高系統的靈活性、可擴展性和可測試性。
