依赖注入

依赖注入

使用接口来实现依赖注入,降低模块间的耦合。
概念: 依赖注入是一种设计模式,它允许你将组件的依赖关系(即其他组件或服务)从组件本身中分离出来,并在组件外部进行配置。这样做可以减少组件之间的耦合,使得代码更加模块化,易于测试和维护。

Go 语言实现: 在 Go 语言中,可以通过接口来实现依赖注入。接口定义了组件所需的行为,然后你可以在运行时注入任何实现了这些行为的具体类型。

优点

  1. 降低耦合:组件不直接依赖于具体的实现类,而是依赖于接口,这降低了组件之间的耦合度。
  2. 提高灵活性:可以轻易地替换依赖的具体实现,而不需要修改组件的代码。
  3. 易于测试:可以为测试注入模拟对象(mocks),从而可以隔离测试组件,不依赖于外部服务或组件。
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
package main

type Logger interface {
Log(message string)
}

type ConsoleLogger struct{}

func (l ConsoleLogger) Log(message string) {
println("Log-DEBUG:", message)
}

type ConsoleLoggerINFO struct{}

func (l ConsoleLoggerINFO) Log(message string) {
println("Log-INFO:", message)
}


type Application struct {
logger Logger
}

func (a *Application) SetLogger(logger Logger) {
a.logger = logger
}

func main() {
app := Application{}
consoleLogger := ConsoleLogger{}
app.SetLogger(consoleLogger)
app.logger.Log("Application started")
consoleLoggerInfo := ConsoleLoggerINFO{}
app.SetLogger(consoleLoggerInfo)
}

上边通过Go语言的Logger接口包含了Log方法, Application包含了Logger接口。 Application可以通过SetLogger来设置任何实现接口中Log 方法的就,可以方便切换日志类型。这就是依赖注入,每个部分都是个组件,可以随意方便的更换


依赖注入
https://leiqi.top/2024-07-21-618c8c29b962.html
作者
Lei Qi
发布于
2024年7月21日
许可协议