依赖注入是一种设计模式吗?

3

我曾开发过一个名为“图书管理系统”的项目,使用了依赖注入进行开发。然而我的同事嘲笑我说依赖注入不是设计模式,让我重新做项目,而我花费了大量时间和精力来创建这个项目。 有没有任何证据可以证明依赖注入是一种设计模式呢?


5
"我必须重新做我的项目" - 为什么? - ProgrammingLlama
1
如果你在谷歌上搜索“依赖注入”,首先弹出的是“_依赖注入(DI)是一种用于实现控制反转的设计模式_”。 - Lolop
还可以查看Stack Overflow关于dependency-injection标签提供的信息。它包含了大量可供您使用的资源。 - Steven
1
为什么“这不是一个设计模式”会成为拒绝你的实现的理由?如果你没有按照“正确的方式™”来完成,那么拒绝可能是合理的。 - Hans Kesting
@Llama 因为高级开发人员对我的知识并不完全满意,这是情况。 - Davron Yusupov
无论DI是否是一种设计模式都不重要,唯一重要的是它对当前项目是否有益。考虑到它的许多优点,你应该将其与其他实践进行比较,看看是否可以用能够产生相同效益的实践或技术来替代它。这是一个值得团队共同投资的分析。没有个人意见,没有"我不喜欢这段代码"。只关注于好处,我们是否需要它,是否可以用更简单的方法达到相同效果?然而,当团队使用相同资源(例如DIPP&P)时,它确实会有所帮助。 - Steven
2个回答

13
在我和Steven van Deursen的书《Dependency Injection Principles, Practices, and Patterns》中所介绍的,依赖注入(Dependency Injection)是一组模式和原则,而不是单一的模式。
最重要的模式是构造函数注入(Constructor Injection)组合根(Composition Root),而一些重要的原则是依赖倒置原则(Dependency Inversion Principle)里氏替换原则(Liskov Substitution Principle)
有些人认为依赖注入(DI)和控制反转(Inversion of Control, IoC)是相同的,但基于Martin Fowler的定义,我不这么认为
其他人将DI与DI容器(DI Containers)的使用混淆。DI容器是可选的,我个人推荐纯DI(Pure DI)

谢谢你的回答!但是我还需要澄清一个问题,如果要求使用软件设计模式,我可以使用依赖注入原则,比如构造函数注入和组合根模式吗? - Davron Yusupov
@DavronYusupov 我要强调这些都是真正的模式。如果有人问它们在哪本书中描述,你也知道是哪本书。我无法理解“使用软件设计模式”怎么可能成为一个要求,除非这真的是某种作业。 - Mark Seemann
@DavronYusupov,Erich Gamma在一次采访中提到,如果GoF书籍有第二版,它将包括依赖注入作为一个创建型模式。我认为这个答案是非常权威和可靠的。 - jaco0646

0
依赖注入是实现依赖倒置原则的方法之一,虽然不是唯一的方式,但却是非常常见的一种方式。重新做项目并不能改变你应该在应用程序中使用依赖注入的事实。你可以询问你的同事们对于依赖倒置的看法以及他们如何实现它。

依赖注入是一种用于实现依赖倒置原则的设计模式之一。 - jaco0646

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接