Dependency injection 关联注入还是依赖注入?
我正在研究依赖注入模式。我读过很多例子,其中一个典型的例子是使用XxxService/XxxRepository作为例子。但我认为,根据UML概念,类XxxRepository应该是类XxxService的关联。为什么不将这种情况称为关联注入,但仍然是依赖注入呢?:) 谢谢 2018年1月26日更新 我目前认为,Dependency injection 关联注入还是依赖注入?,dependency-injection,associations,uml,Dependency Injection,Associations,Uml,我正在研究依赖注入模式。我读过很多例子,其中一个典型的例子是使用XxxService/XxxRepository作为例子。但我认为,根据UML概念,类XxxRepository应该是类XxxService的关联。为什么不将这种情况称为关联注入,但仍然是依赖注入呢?:) 谢谢 2018年1月26日更新 我目前认为,依赖注入的概念适用于这个问题中描述的情况。因为关联在UML中只是一种特殊的依赖关系 马丁·福勒说: “如果一个要素(供应商)的定义变更可能导致另一个要素(客户)的变更,则两个要素之间存在
依赖注入的概念
适用于这个问题中描述的情况。因为关联在UML中只是一种特殊的依赖关系
马丁·福勒说:
“如果一个要素(供应商)的定义变更可能导致另一个要素(客户)的变更,则两个要素之间存在依赖关系”。
这是一个非常模糊和一般的关系,这就是为什么UML
对于不同形式的依赖关系有很多刻板印象
及
关联也意味着依赖性,如果两个类之间存在关联,那么也存在依赖性
所以我现在不能接受任何答案。或者这个问题不是一个好问题,因为每个开发人员都有自己的观点。我正在认真考虑结束这个问题。因为依赖注入是为编码而定义的,而不是为设计而定义的 您可以编写包含或不包含注入的关联,但它是一个关联 例如,在Java中,以下代码显示实现接口IB的类a和类B之间的关联
甲级{
@注入
私人IB b;
...
}
或
甲级{
私有IB b=新b();
...
}
首先:我想澄清一些关于依赖注入的提示
在依赖项注入中(参见(第4段)):
- 客户机不需要知道如何构造服务李>
- 客户不需要知道它正在使用哪些实际服务李>
- 客户机只需要知道服务的内部接口,因为这些接口定义了客户机可以如何使用服务
class A {
@Inject
private IB b;
//...
}
我们实际上不知道哪个类的对象(实现了IB
)被注入了b
可能注入的类在运行时发生了变化,也可能是因为某些配置是手动或自动处理的。也许它会随着时间的推移而动态变化,等等
因此,我们不能在类A
和其他类(哪个类?哪个对象?)之间使用关联
因此,类A
和接口IB
之间只有依赖关系
在小型项目中,我们的项目中可能只有一个IB
的实现。或者我们没有任何机制来进行动态注射。在这种情况下,可以使用关联。然而,在这种情况下,不需要依赖注入
要从Martin Fowler那里找到好的解释和好的示例,请参阅 根据:
依赖注入是一种由一个对象提供
另一个对象的依赖项。(…)将服务传递给客户机,而不是允许客户机构建或查找服务,是该模式的基本要求
请注意,注入不必在施工时进行,即使它经常进行
A是单向的:一个对象依赖于另一个对象。依赖注入的目标是促进一个方向超过另一个方向(例如)
比依赖项更通用:它可以是单向的,也可以是双向的,这取决于它的可导航性。因此,在大多数情况下,“注入关联”不会说明首选方向:一旦关联存在,它仍可能以错误的方式使用 人们为什么称他们所做的事情是可以推测的(所以这里是基于观点和离题的)。请删除你问题中的这一部分。@ThomasKilian有时是真的。然而,有时有一个历史背景或一个已知的和有文献记载的原因,使得这些命名问题的范围非常明确。@Christophe有时。在这里,它们就像黑猩猩和大猩猩一样,都是从一个共同的前身“依赖”这个词的基本意义上继承下来的。否则他们就没有关系了。因此,如果黑猩猩进一步发展为倭黑猩猩,或者UML依赖于UML关联,对大猩猩来说并不重要。