相关疑难解决方法(0)

控制反转与依赖注入

根据Martin Fowler撰写论文,控制反转是程序控制流程被颠倒的原则:代替程序员控制程序流程,外部源(框架,服务,其他组件)控制它.这就像我们把东西塞进别的东西.他提到了一个关于EJB 2.0的例子:

例如,会话Bean接口定义ejbRemove,ejbPassivate(存储到辅助存储)和ejbActivate(从被动状态恢复).你无法控制何时调用这些方法,只是它们的作用.容器打电话给我们,我们不打电话给它.

这导致框架和库之间的区别:

控制反转是使框架与库不同的关键部分.库本质上是一组可以调用的函数,这些日子通常组织成类.每个调用都会执行一些操作并将控制权返回给客户端.

我认为,DI是IOC的观点,意味着对象的依赖性被颠倒了:相反,它控制着自己的依赖关系,生命周期......还有其他东西为你做.但是,正如你用手告诉我的DI,DI不一定是IOC.我们仍然可以有DI而没有IOC.

然而,在本文中(来自pococapsule,另一个IOC C/C++框架),它表明,由于IOC和DI,IOC容器和DI框架远远优于J2EE,因为J2EE将框架代码混合到组件中因此不能成为普通的旧Java/C++对象(PO​​JO/POCO).

除依赖注入模式之外的控制容器的反转(存档链接)

附加阅读以了解旧的基于组件的开发框架的问题是什么,这导致了上面的第二篇论文:为什么以及什么是控制反转(存档链接)

我的问题:IOC和DI究竟是什么?我很迷惑.基于pococapsule,IOC比仅仅反转对象或程序员和框架之间的控制更重要.

dependency-injection inversion-of-control

467
推荐指数
14
解决办法
26万
查看次数

IoC和DI之间的区别究竟在哪里

可能重复:
控制反转<依赖注入

我总是在相同的上下文中读取IoC(控制反转)和DI(依赖注入).IoC和DI有什么区别?IoC与DI有何不同?

dependency-injection inversion-of-control

36
推荐指数
2
解决办法
3万
查看次数

有没有人对依赖注入有一个很好的比喻?

我已经阅读了很多关于依赖注入的文章以及观看了很多视频,但我仍然无法理解它.有没有人有一个很好的类比来解释它?

我看了敏捷秋播的第一部分截屏,但仍然有点困惑.

dependency-injection

24
推荐指数
2
解决办法
2053
查看次数

控制反转<依赖注入

我感觉不存在控制倒置这样的事情,或者说正确的术语是依赖注入.我错了这个假设吗?

我一直试图为自己定义IoC.在这样做的过程中,我学到了很多关于IoC容器和依赖注入的知识.

刚才,我从Martin Fowler的网站上看到了这个:

结果我认为我们需要一个更具体的名称来模式.控制反转过于笼统,因此人们会发现它令人困惑.结果与各种IoC倡导者进行了大量讨论,我们选择了Dependency Injection这个名称.

在现代IoC世界中,依赖注入只是实现IoC的一种方式吗?

dependency-injection terminology inversion-of-control

20
推荐指数
2
解决办法
7744
查看次数

DIP vs. DI与IoC

大概2个月我一直在阅读这三个主题我能找到的所有东西,我还不确定我是否已经找到了.

  1. 依赖倒置原则.意味着你应该始终只依赖于接口而不是它们的实现.如果你的班级依赖于任何其他班级,这是不好的,因为它取决于第二类的细节.如果你的类依赖于接口,这绝对可以,因为这种依赖只意味着你的类需要一些抽象的东西,它可以做一些具体的事情而你并不真正关心它的做法.

    由于"DIP"中的P代表"原理",我应该用这种方式定义:依赖性倒置原则是一个原则,要求所有代码的实体仅依赖于他们真正需要的细节.

    通过"他们真正需要的细节",我指的是最简单的情况下的接口.我还使用"实体"这个词来强调DIP也适用于程序和其他任何东西,不仅适用于类.

  2. 依赖注入.它仅适用于启用DI的实体.启用DI的实体是一个"开放"的实体,用于配置其行为而不更改其内部.注入有两种基本类型(在谈论类时):

    • 构造函数注入 - 当您将所有必需的"抽象细节"传递给对象时,就在它即将构建的那一刻.
    • Setter Injection - 在您创建对象后"澄清"所需方面.

    因此,定义可能如下:依赖注入是将"抽象细节"传递给真正需要这些细节的实体的过程.

    通过"真正需要这些细节",我指的是最简单的情况下的接口."实体"一词一如既往地用来强调DI也适用于程序和其他任何东西.

  3. 控制反转.它通常被定义为"库和框架之间的差异","以程序编程中的任何一种方式编写程序"等等.这对我来说是最令人困惑的事情.我认为这里的主要想法只是启动任何行动.要么"随时随地"(程序方式)做某事,要么"等"直到有人问你(IoC方式).

    我的定义是:IoC是程序执行流程的一个属性,当你不要做任何事情,直到他们要求你这样做.

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

我理解吗?

architecture theory dependency-injection inversion-of-control

16
推荐指数
1
解决办法
6292
查看次数

服务定位器,依赖注入(和容器)和控制反转

我已经编程了一段时间但从未对理解每个概念的含义感兴趣,我可能正在使用各种编程概念,但却不知道它.

服务定位器:对我来说,是指通过减少代码量来加快开发速度的快捷方式记录.一个问题是:可能Locator仅引用名称空间/类,或者我可以拥有变量注册表?

以下是我对它的理解:

$locator = new ServiceLocator()
$locator->set('app', new System\Application());
$locator->set('db', new System\Pdo());

// Get the objects
$locator->get('db')->connect();
$locator->get('app')->run();
Run Code Online (Sandbox Code Playgroud)

依赖注入(和依赖注入容器):在对象内注入对象,无论工厂模式如何,都可以更快地访问这些对象.和DI容器?

以下是我对它的理解:

$app = new System\Application(System\Config::load());
Run Code Online (Sandbox Code Playgroud)

控制反转:不了解这种设计模式(或者理解但不知道我做的是IoC)

然后,在理论上(最好用简单的例子),这些概念中的每一个意味着什么?我是正确的,还是有什么不对/可以改进?

谢谢!

php design-patterns dependency-injection inversion-of-control service-locator

12
推荐指数
2
解决办法
5342
查看次数

Facade 模式是否违反了 SOLID 原则?

我问自己,外观模式是否违反了 SOLID 原则,以及模式本身是否是反模式。

更新

我的意见:

  • 当您不只是直接调用方法,而是执行诸如事务、日志记录、错误处理(我见过很多次)之类的事情时,就违反了SRP。即使只是调用其他方法,我也有疑问。
  • 违反了OCP,因为你会在facade中添加更多的方法

  • LSP / ISP被违反,因为消费者/客户端有依赖,会有太多客户端不需要的方法。

  • DIP,在我看来,只要接口本身只公开抽象或 DTO,就不会被违反。

SOLID一般是我约的意见稳定,从而组合的接口。

一个门面往往是相反的不稳定

design-patterns facade solid-principles

8
推荐指数
1
解决办法
3362
查看次数

ioc和依赖注入之间的区别

ioc和依赖注入之间的区别.解释春天的依赖注入.什么是差异b/w JSF依赖注入和spring依赖注入..

dependency-injection terminology

2
推荐指数
1
解决办法
5866
查看次数

为什么用这么多术语来表达同一件事?IoC 和 DIP

IoC = 控制反转

DIP = 依赖倒置原理(SOLID 中的 D)

IoC == DIP?我想是这样的,确实如此。

构建软件的世界已经如此混乱,为什么还要用这么多词来表达同样的事情呢?

(我知道DI (依赖注入),它与DIPIoC不同)

更新:

根据答案,我们可以说: ( DI ) + ( IoC ) = (依赖倒置原理) ?

dependency-injection terminology inversion-of-control

2
推荐指数
2
解决办法
1414
查看次数