我最近一直在做Go项目。为了允许每个组件都是可单元测试的,我一直在遵循几篇文章中指定的模式来更改函数,例如:
func WriteObject(obj ObjType) {
dbClient := DBClient{}
dbClient.WriteObject(obj)
}
就像:
type WriteObject interface {
WriteObject(obj ObjType)
}
type ProxyWriteObject struct {
dbClient DBClientInterface
}
func (p * ProxyWriteObject) WriteObject(obj ObjType) {
p.dbClient.WriteObject(obj)
}
这样我就可以在测试期间模拟dbClient。我的问题是,如果我使用这种方法,我将有一堆组件都依赖于接口。实现这些接口的对象的实例应该在哪里构造?最明显的事情似乎是让不受任何其他依赖的顶级对象构建其依赖项以及所有依赖项的依赖项等,但这将非常混乱。
我主要使用Java,所以通常我会使用Dagger/Guice/Spring来构建和注入对象。Go 中是否有类似或推荐的 DI 框架,或者构建这些对象的推荐方法是什么?
慕虎7371278
相关分类