依賴(dependency)

依賴(Dependency):通常指的是一個類別依賴於另一個類別或介面來完成其功能。

  • 依賴使得類別之間的耦合度增加,讓系統變得難以維護和測試。

依賴關係的方向性可以分為單向依賴(Unidirectional Dependency)和雙向依賴(Bidirectional Dependency)。

  • 單向依賴(Unidirectional Dependency):是指一個類別或模組依賴於另一個類別或模組,但相反的依賴關係不存在。這種依賴關係是單向的,即依賴的方向是單一的,這種依賴的程式碼較容易維護和擴展。

    • 在下面例子中,Car 類別依賴於 Engine 類別,但 Engine 類別並不依賴 Car 類別。這就是一個單向依賴的例子。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      public class Engine
      {
      public void Start()
      {
      Console.WriteLine("Engine started.");
      }
      }

      public class Car
      {
      private Engine _engine;

      public Car(Engine engine)
      {
      _engine = engine;
      }

      public void Start()
      {
      _engine.Start();
      }
      }
  • 雙向依賴(Bidirectional Dependency):是指兩個類別或模組互相依賴,形成了雙向的依賴關係。這種依賴關係會增加系統的耦合度,使得程式碼難以維護和測試。

    • 通常在設計中應該盡量避免雙向依賴,或者使用依賴注入和接口等技術來減少耦合度。
    • 在這個例子中,Engine 類別依賴於 Car 類別,並且 Car 類別也依賴於 Engine 類別,形成了雙向依賴。這種設計會使得類別之間的關係變得複雜,難以維護和測試。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      public class Engine
      {
      private Car _car;

      public Engine(Car car)
      {
      _car = car;
      }

      public void Start()
      {
      Console.WriteLine("Engine started.");
      _car.NotifyEngineStarted();
      }
      }

      public class Car
      {
      private Engine _engine;

      public Car()
      {
      _engine = new Engine(this);
      }

      public void Start()
      {
      _engine.Start();
      }

      public void NotifyEngineStarted()
      {
      Console.WriteLine("Car notified: Engine started.");
      }
      }

      public class Program
      {
      public static void Main(string[] args)
      {
      Car car = new Car();
      car.Start();
      }
      }

評論