2

两张图让你理解IOC(控制反转)

 2 years ago
source link: https://gargantuax.github.io/blog/2017-02/%E4%B8%A4%E5%BC%A0%E5%9B%BE%E8%AE%A9%E4%BD%A0%E7%90%86%E8%A7%A3ioc%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

简单理解依赖注入(DI,Dependency injection)

依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。

简单理解控制反转(IOC,(Inversion of Control)

一开始我们代码依赖关系可能是如图这样的,这里只举例了3个对象和三个类的交叉依赖,我们代码的依赖关系实际情况其实要复杂得多,脑补十多个对象的交叉,甚至还有横向交叉。

现在问题来了,由于不可抗拒的原因,PHP版本升级,需求更改等等,要把α对象替换掉,把β对象删掉,请问我们要改多少处代码?😭

是时候拿出IOC了。

瞬间清爽。

IOC容器在全局维持一个对象实例集合和类名集合,我们在写某个类的时候把这个类依赖的对象注册到容器里,调用这个类的时候再实例化拿出来。

这个就是IOC的思想,一个系统通过组织控制和对象的完全分离来实现”控制反转”。对于依赖注入,这就意味着通过在系统的其他地方控制和实例化依赖对象,从而实现了解耦。

拓展阅读:

PHP之道-依赖注入和IOC

PHP程序员如何理解IOC

理解Laravel的IOC


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK