【发布时间】:2017-09-30 13:19:17
【问题描述】:
如果我遵循依赖注入原则进行类设计,我应该确保我的类不会尝试在我的类中实例化它的依赖项,而是通过构造函数请求对象。
通过这种方式,我可以在对类进行单元测试时控制我为类提供的依赖项。这个我明白。
但我不确定这是否意味着遵循依赖注入原则的良好类设计意味着它的字段永远不应该内联初始化?我们是否应该完全避免内联初始化以生成可测试的代码?
编辑
1 和 2 哪个更好?
1
public class Car {
private Tire tire = new Tire(); //
}
2
public class Car {
private Tire tire;
public Car(Tire tire) {
this.tire = tire
}
}
【问题讨论】:
-
这显然取决于字段的类型。当您只在该类中需要它们时,注入“基本”类型(如
Number、日期相关(java.time)类或StringBuilder)是没有意义的。 -
“内联初始化”到底是什么意思?那些字段是由类本身在构造函数中初始化的还是什么?
-
我应该确保我的类不会尝试在我的类中实例化它的依赖项:当然。不过,这正是您的第一个 sn-p 所做的。所以你有你的答案。必须从类外部提供依赖项。这显然不是你的第一个 sn-p 的情况。
-
@JBNizet 是的,这很清楚。但这总是规则吗?这是否意味着如果我在一个类中看到内联初始化,这是一个糟糕的设计?
-
没有。当然不是。依赖注入是一种工具,适合在某些情况下使用,而不适合在其他情况下使用。
标签: java unit-testing testing