类的用户应该知道给定类的依赖关系。如果我有一个类,例如,一个连接到数据库的类,并且没有提供注入持久层依赖的方法,那么用户将永远不会知道必须要有一个与数据库的连接。但是,如果我更改了构造函数,则会让用户知道持久层存在依赖性。
另外,为避免自己不得不改变对旧构造函数的每次使用,只需将构造函数链接作为新旧构造函数之间的临时桥梁即可。
public class ClassExample
{
public ClassExample(IDependencyOne dependencyOne, IDependencyTwo dependencyTwo)
: this (dependnecyOne, dependencyTwo, new DependnecyThreeConcreteImpl())
{ }
public ClassExample(IDependencyOne dependencyOne, IDependencyTwo dependencyTwo, IDependencyThree dependencyThree)
{
// Set the properties here.
}
}
依赖注入的要点之一就是揭示类具有什么依赖。如果类具有过多的依赖关系,那么可能是时候进行一些重构了:类的每个方法都使用所有依赖关系吗?如果不是这样,那么这是查看可以在哪里拆分类的一个很好的起点。