我应该选择依赖注入还是工厂模式

Nha*_*han 5 design-patterns dependency-injection

我正在调查依赖注入。我发现:大多数引用的依赖注入使用示例,我们也可以使用工厂模式来解决。

您能帮我比较 DI 和工厂模式之间的优缺点吗?我应该始终选择依赖注入而不是工厂模式吗?还是取决于指定的项目?

我怎么知道什么是最好的解决方案?对此的最佳实践是什么?

bcp*_*rth 5

让我们看看它们之间的区别。

通过 DI,对象在外部创建并“注入”以供客户端对象使用。注入通常通过构造函数完成。

然而,在复杂的情况下,通常会注入 DI 容器来创建依赖项对象,包括所有子依赖项。所以它看起来就像抽象工厂!

使用抽象工厂,注入具体工厂类的实例,并由客户端对象实例化依赖对象。

因此,DI 和抽象工厂几乎是相同的,当您考虑到在这两种情况下,工厂对象都会传递给客户端以使其能够创建其依赖项。

仅在简单情况下,从属对象是在外部创建的并传递给客户端对象。这就是策略模式的工作原理。

由于 DI 容器现在如此流行,并且在框架中使用如此广泛,它们已经有效地取代了抽象工厂,至少作为一种经常谈论的模式。DI 容器是比抽象工厂想象的复杂得多的实体(我相信)。

所以没有最佳实践!