我注意到FormBuilder
的构造函数是默认的空构造函数。
export class FormDI {
constructor(private fb: FormBuilder) {}
private buildForm() {
let form = this.fb.group({...});
}
}
export class FormNoDI {
private buildForm() {
let form = new FormBuilder().group({...});
}
}
以上两个类都具有非常好的FormBuilder,那么为什么对这些类型的类使用依赖注入而不是像声明变量一样好呢?
答案 0 :(得分:3)
我不清楚默认的空构造函数与它有什么关系……在这里DI是一种很好的做法,其原因与在任何地方都是一种很好的做法的原因相同。
具体来说,如果您不使用DI而是使用new FormBuilder
,那么您将与代码导入的特定FormBuilder
实现紧密结合-因此,如果没有别的选择,编写测试就更难了与FormBuilder
隔离的。
通过使用DI,您可以允许传入将“传递” FormBuilder
的任何对象(从接口的角度来看),因此您的测试代码可以轻松地传递模拟而不是真实的FormBuilder (为特定的测试用例强制特定的行为,或者只是为了避免依赖真实FormBuilder的“适当”行为的测试。)
请注意,模拟可以像其他任何东西一样被过度使用,您是否愿意提供替代实现取决于情况。但是通过使用DI,您可以选择。