依賴(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
22public 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
44public 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();
}
}