处理依赖项注入

时间:2019-11-26 11:36:05

标签: go dependency-injection refactoring

假设我有以下代码:

import (
   handlerA "some/path/handlerA"
   handlerB "some/path/handlerB"
   handlerC "some/path/handlerC"
   handlerD "some/path/handlerD"
   ....
   handlerZ "some/path/handlerZ"
)

func DoSomething(a handlerA.A, b handlerB.B, c handlerC.C, d handlerD.D..., z handlerZ.Z) {
   a.DoA()
   b.DoB()
   c.DoC()
   d.DoD()
   ....
   z.DoZ()
}

我显然使函数DoSomething(...)是可模拟的,因为这使我的函数单元可测试。但是由于这个原因,由于需要注入所有依赖关系,因此我可以使用许多参数。

Golang中有更好的方法来处理许多依赖吗?

1 个答案:

答案 0 :(得分:2)

处理多次注入的一种方法是使用结构作为包装器:

type SomethingDoer struct {
  a handlerA.A,
  b handlerB.B,
  c handlerC.C,
  d handlerD.D,
  ...
  z handlerZ.Z,
}

func (sd SomethingDoer) DoSomething() {
   sd.a.DoA()
   sd.b.DoB()
   sd.c.DoC()
   sd.d.DoD()
   ....
   sd.z.DoZ()
}

我是通过再次阅读自己的问题来解决这个问题的...