已经有几个问题已经发布了关于
dependency injection的具体问题,如何时使用它和什么框架有它。然而,
什么是依赖注入和什么时候/为什么应该或不应该使用它?
基本上,不是让你的对象创建一个依赖或者要求一个工厂对象为它们创建一个,你传递所需的依赖关系到构造函数或通过属性设置,你使它成为别人的问题(一个对象进一步向上依赖图,或构建依赖图的依赖注入器)。我在这里使用的依赖是当前对象需要保存的引用的任何其他对象。
依赖注入的一个主要优点是它可以使测试更容易。假设你有一个在其构造函数中有类似的对象:
public SomeClass() { myObject = Factory.getObject(); }
当所有你想做的是在SomeClass上运行一些单元测试时,这可能很麻烦,特别是如果myObject是执行复杂磁盘或网络访问的东西。所以现在你看着嘲笑我的对象,但也以某种方式拦截工厂调用。硬。相反,将该对象作为参数传递给构造函数。现在你已经将问题移动到其他地方,但测试可以变得更容易。只是做一个虚拟的myObject和传递。构造函数现在看起来有点像:
public SomeClass (MyClass myObject) { this.myObject = myObject; }
大多数人可能解决在测试时不使用依赖注入可能出现的其他问题(如在构造函数中执行太多工作的类)。大多数是我在Google Testing Blog上取得的东西,是完全诚实的。 … ..