【公告】因應 .NET5 2020 改版,原預計 6/1 開放 ASP.NET MVC 全系列課程訂閱暫停

SOLID 設計原則 - 相依性反轉原則(DIP)

遵循 DIP 設計的應用程式中,元件彼此透過抽象化建立相依性,避免類別物件因為明確的相依性關係導致系統演進的困難。

到目前為止,前述討論四個設計原則的實作範例中,已經體驗了遵循「相依性反轉原則(DIP)」的設計。

double UnitConversion(IUnitConversion conversion, double d)
{
    double result = conversion.Conversions(d);
    return result;
}

開放-封閉原則 - OCP為了支援單位轉換功能的擴充,方法成員 UnitConversion 以介面 IUnitConversion 參數型別,取代特定的實作類別,如此一來,這個方法可以同時支援任何實作 IUnitConversion 介面的型別物件參數,包含範例中已建立的 OZConversion 類別與 TemperatureConversion 類別,我們不需要因為後續其它單位轉換功能的擴充或是調整改寫 UnitConversion,這個方法因此成為 IUnitConversion 介面通用方法。

透過建立抽象層讓實作類別可以跟應用程式切割,不會因為單獨元件的擴充或調整影響應用程式,是DIP最重要的精神,這對於大型系統的演進提供正面的助益。

相依性反轉另外一個關鍵的好處在於,因為通用介面隔離特定型別物件的相依性,進一步讓測試工作更容易進行,我們可以經由建立相容型別的偽物件支援複雜功能測試作業,這一部份於下一章討論測試主題時,進行完整的說明。

移除特定功能元件的相依性,是維持大型系統發展的彈性並降低後續演進難度的關鍵,SOLID提供實踐相關實作的基礎,不過相對的,也帶來更進一步的問題,最顯而亦見的,是導入介面等抽象層的過程中,相關物件的建立以及生命期的管理,這導致我們必須建置更複雜的底層來維持系統的運作,幸運的是,軟體工程經過多年的發展,開發人員可以透過現成工具的輔助,避免處理相關的細節。


沒有留言: