As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center获取指导。




已关闭8年。





在大约2个月的时间里,我一直在阅读我可以找到的关于这3个主题的所有内容,但我不确定我是否明白。


依赖反转原理。意味着您应该始终仅依赖于接口,而不应依赖于其实现。如果您的班级依赖于任何其他班级,那是不好的,因为它取决于该第二班级的详细信息。如果您的类依赖于接口,那绝对可以,因为这种依赖仅意味着您的类需要某种抽象的东西,可以做特定的事情,而您实际上并不关心它的实现方式。

由于“ DIP”中的P代表“原理”,因此我可能应该这样定义:依赖倒置原则是一项原则,要求您所有代码的实体仅依赖于它们真正需要的细节。

“他们真正需要的细节”是指最简单的情况下的接口。我还使用“实体”一词来强调DIP不仅适用于类,还适用于过程和其他任何事物。
依赖注入。仅适用于启用DI的实体。启用DI的实体是“开放的”实体,用于配置其行为而不更改其内部。注入有两种基本类型(在谈论类时):


构造函数注入-是在即将要构造对象时将所有必需的“抽象细节”传递给对象的时候。
设置器注入-是在创建对象之后“澄清”所需方面的时候。


因此,定义可能如下所示:依赖注入是将“抽象细节”传递给确实需要这些细节的实体的过程。

“真正需要这些细节”是指最简单的情况下的接口。像往常一样,“实体”一词用来强调DI也适用于过程和其他任何东西。
控制反转。通常将其定义为“库与框架之间的差异”,“以您在过程编程中所做的任何一种方式编写程序”等等。那对我来说最令人困惑。我相信这里的主要思想只是关于采取任何行动。您要么“随时随地”执行操作(程序方式),要么“等待”直到有人问您(IoC方式)。

我的定义是:IoC是程序执行流的一个属性,当您什么都不做,直到他们要求您执行时,IoC才是。

这听起来完全像是“好莱坞原则”,但我相信“好莱坞原则”和IoC都是完全相同的想法。


我懂吗

最佳答案

我的看法是:DIP是指导我们迈向DI的原则。基本上,松耦合是目标,并且至少有两种方法可以实现它。


依赖注入
服务定位器


但是,Service Locator is an anti-pattern与DIP无关。但是,DI是DIP的正确应用。

relationship between DI and IoC has been explained before

顺便说一句,当谈到DI和松散耦合时,我发现Domain-Driven Design中列出的术语最适用。基本上是Services are the only kinds of objects subjected to DI

关于architecture - DIP vs. DI vs. IoC ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6766056/

10-11 05:18