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

Should I choose Dependency Injection or Factory Pattern

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

你能帮我比较一下DI和工厂模式的强弱点吗?我应该总是选择依赖注入而不是工厂模式吗?还是取决于指定的项目?

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


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

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

但是,在复杂的情况下,注入DI容器以创建依赖对象(包括所有子依赖项)是很常见的。所以它看起来像抽象工厂!

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

因此,DI和抽象工厂基本上是相同的,当您考虑到这两种情况时,工厂对象都传递给客户机,以使其能够创建依赖项。

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

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

所以没有最佳实践!


我喜欢在接口上使用简单的依赖注入。只需将实现接口的对象传递给构造函数。

这还有一个额外的优点,您可以轻松模拟接口并在构建服务器/计算机上运行测试。由于Xamarin的部署需要很长的时间,请尝试尽可能多地进行单元测试。


@珀斯:来自Xamarin大学,他们提到,两者都有优缺点:

enter image description here

enter image description here

另外,我认为在DI中,类是第一个创建的,我们的程序在运行时保存它,这样会浪费内存(以防我们需要优化内存)。

这是我的观点,但实际上我不知道在特定的情况下我们应该使用什么更好。然后我需要在那里讨论一下。

加油!