依赖注入是一种设计模式吗? [关闭]

Posted

技术标签:

【中文标题】依赖注入是一种设计模式吗? [关闭]【英文标题】:Is dependency injection a design pattern? [closed] 【发布时间】:2021-06-29 02:56:05 【问题描述】:

好吧,我正在开发一个名为 Library Management System 的项目,我使用依赖注入来开发它,但是我的同事们嘲笑我说依赖注入不是一种设计模式,我必须重做我的项目,而我花了很多钱时间和精力来创建我的项目。 是否有任何证据表明我可以将依赖注入称为设计模式?

【问题讨论】:

“我必须重做我的项目” - 为什么? 如果你用谷歌搜索“依赖注入”,首先弹出的是“依赖注入 (DI) 是一种用于实现 IoC 的设计模式”。 还可以查看 Stack Overflow 提供的关于 dependency-injection 标签的信息。它包含丰富的资源供您使用。 为什么“这不是设计模式”会成为拒绝您的实施的理由?如果您没有以“正确的方式™”拒绝,则拒绝可能是有效的 @Llama 因为高级开发人员对我的知识并不完全满意,情况就是这样。 【参考方案1】:

Steven van Deursen 和我在我们的书Dependency Injection Principles, Practices, and Patterns 中介绍它的方式,依赖注入 是一组模式和原则;即不是一个单一的模式。

最重要的模式是Constructor Injection 和Composition Root,而一些重要的原则是Dependency Inversion Principle 和Liskov Substitution Principle。

有些人认为依赖注入 (DI) 和控制反转 (IoC) 相同,但基于 Martin Fowler 的定义,I don't think that's the case。

其他人将 DI 与 DI Containers 的使用混淆了。 DI 容器是可选的;我个人推荐Pure DI。

【讨论】:

感谢您的回答!但是,如果可以,我仍然必须澄清一点。如果要求使用软件设计模式,我可以使用 DI 原则作为构造函数注入和复合根模式吗? @DavronYusupov 我会断言这些是真正的模式。如果有人问他们是在哪本书中描述的,你也知道是哪本书。我看不出“使用软件设计模式”怎么可能成为要求,除非这真的是某种家庭作业。 @DavronYusupov,Erich Gamma 在interview 中提到,如果 GoF 书籍有第二版,它将包含依赖注入作为创建模式。我认为这个答案是人们希望找到的最权威的答案。【参考方案2】:

依赖注入是实现依赖Inversion原理的方法之一,它不是唯一的方法,但它是实现它的一种非常常见的方法。重做您的项目并不会真正改变您应该在应用程序中使用 DI 的事实。您可以询问您的同事他们对依赖倒置的看法以及他们将如何实现它

【讨论】:

依赖注入是用于实现Dependency Inversion Principle的设计模式之一。

以上是关于依赖注入是一种设计模式吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Angular依赖注入介绍

依赖注入[2]: 基于IoC的设计模式

AngularJS(15)-依赖注入

AngularJS 依赖注入

AngularJS依赖注入

AngularJS 依赖注入