Dependency injection 关联注入还是依赖注入?

Dependency injection 关联注入还是依赖注入?,dependency-injection,associations,uml,Dependency Injection,Associations,Uml,我正在研究依赖注入模式。我读过很多例子,其中一个典型的例子是使用XxxService/XxxRepository作为例子。但我认为,根据UML概念,类XxxRepository应该是类XxxService的关联。为什么不将这种情况称为关联注入,但仍然是依赖注入呢?:) 谢谢 2018年1月26日更新 我目前认为,依赖注入的概念适用于这个问题中描述的情况。因为关联在UML中只是一种特殊的依赖关系 马丁·福勒说: “如果一个要素(供应商)的定义变更可能导致另一个要素(客户)的变更,则两个要素之间存在

我正在研究依赖注入模式。我读过很多例子,其中一个典型的例子是使用XxxService/XxxRepository作为例子。但我认为,根据UML概念,类XxxRepository应该是类XxxService的关联。为什么不将这种情况称为关联注入,但仍然是依赖注入呢?:)

谢谢

2018年1月26日更新

我目前认为,
依赖注入的概念
适用于这个问题中描述的情况。因为关联在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关联,对大猩猩来说并不重要。