[C#] #8 介面在專案中的實際應用

介面在專案中的實際應用

在專案中創建Services資料夾,並在之中創建Interfaces資料夾。

以AesCrypto為例建立介面

在Interfaces中建立一個名為IEncryption.cs的interface。

實作 AesCryptoService Class

接著在Services下建立名為AesCryptoService.cs的類別

AesCryptoService繼承了IEncryption因此必須提供所有介面成員的具體實現。

注意需要using Services.Interfaces

註冊

接著到Program.cs註冊,以明確告訴 ASP.NET Core DI 容器如何創建這些服務的實例。

建構

通過建構函數注入使用這些服務

使用

可以直接使用,不必每用一次就new一次。

介面的好處

依賴注入建議使用介面的原因

  1. 解耦合

    • 介面允許類之間的低耦合。當一個類依賴於介面而不是具體的實現時,它並不知道具體的實現細節,這使得類之間的依賴關係變得更鬆散。
  2. 可替換性

    • 使用介面可以方便地替換實現。例如,在單元測試中,你可以替換成假物件(Mock)或測試版本的實現,而不需要改變依賴的類的代碼。
  3. 增強靈活性

    • 當需求變更時,只需要改變介面的實現,而不需要改變依賴於這些介面的類。這樣的設計增強了系統的靈活性和可擴展性。
  4. 提高可測試性

    • 依賴注入使得單元測試更容易,因為你可以注入模擬的依賴,而不是使用真實的實現。這使得測試變得更獨立和可控。
  5. 遵循SOLID原則

    • 使用介面有助於遵循SOLID原則中的依賴倒置原則(Dependency Inversion Principle, DIP)。這一原則強調高層模塊不應該依賴低層模塊,兩者都應該依賴於抽象。介面即為這樣的抽象。
  6. 清晰的契約(Clear Contract)增加了可維護性

    • 使用介面可以使得代碼更易讀和易維護。介面明確了類需要實現的行為,這有助於理解和維護系統。

設計模式-以工廠模式為例

1. 靈活的對象創建和管理(Flexible Object Creation and Management)

工廠模式使用介面來定義要創建的對象類型,使得工廠方法可以創建和返回不同的實現,增強了系統的靈活性。

2. 簡化代碼修改和擴展(Simplified Code Modification and Extension)

通過介面和工廠模式的結合,可以在不修改現有代碼的情況下添加新的類型和行為,僅需新增實現和更新工廠方法。

3. 增強測試能力(Enhanced Testability)

工廠模式結合介面可以輕鬆替換具體實現,使得測試更加簡便。可以輕鬆地創建模擬對象來進行單元測試,提升測試的可控性和覆蓋範圍。

可參考先前文章:

[C#] #1 認識介面(interface) <br/> [C#] #2 工廠模式與介面在C#中的應用 <br/> [C#] #3 策略模式與介面在C#中的應用 <br/> [C#] #4 依賴注入與介面在C#中的應用 <br/>