以下代码有什么问题?IoC和依赖注入
public class DeDoper {
public boolean wackapediaOkToday() {
DnsResolver resolver = ResolverFactory.getInstance().makeResolver();
return resolver.getIpAddressFor("wackapedia.org").equals("123.456.78.9");
}
}
为什么这个版本首选?
public class DeDoper {
@InjectService
private DnsResolver resolver;
public boolean wackapediaOkToday() {
return resolver.getIpAddressFor("wackapedia.org").equals("123.456.78.9");
}
}
我可以很容易模拟ResolverFactory.makeResolver(),这是与设置旋转变压器是最新的例子。
这是在this article从ProQuest.biz说:
此[首页]版本WackapediaOkToday是非常严格意义上“注入”了的DNSResolver(虽然这是无可否认不太像得到了一枪,更像是向服务员询问支票)。但它确实解决了测试问题,并解决了“乌龟一路下山”的问题。
链接到工厂 但是在这个[第一版本]方法中,我们实际上是“链接”到Factory类的。 (更糟糕的是,如果我们的工厂创建的对象轮流依赖,我们可能不得不在工厂中引入新的工厂)。我们还没有完全“颠倒”我们的控制,我们仍然从内部调用(控制)工厂我们的课程。
我们需要的是一种完全摆脱我们课程控制的方法,让他们告诉他们所得到的(他们的依赖)。