什么是依赖注入

作者:youngxs
转载:www.jianshu.com/p/31b299bf04d8
把有依赖关系的类放到容器中,解析出这些类的实例,就是依赖注入。目的是实现类的解耦。

实例:Class A 中用到了 Class B 的对象 b,一般情况下,需要在 A 的代码中显式的 new 一个 B 的对象。采用依赖注入技术之后,A 的代码只需要定义一个私有的 B 对象,不需要直接 new 来获得这个对象,而是通过相关的容器控制程序来将 B 对象在外部 new 出来并注入到 A 类里的引用中。这样做有什么好处呢?

解释:假如现在有 N 多个类,需要用到 Class B, 那就需要在类里面实例化 N 多次,这样对于后期的维护和管理都是不方便的,如果后期需求发生改变,那更改量有大很多。

依赖注入的具体实现:

Laravel

依赖注入代码

上面代码中的就是依赖注入,现在又有一个问题,假如,现在类 b 中的 b 方法现在改名为 c 了,那 a 类里面的 a 方法中,就要将 b 类中调用的 b 方法改成 c 方法。那依旧涉及到那个问题,如果有 N 多个类要用到 B 类呢?那需要做的也是去 N 多个类中不断得去改,这样对后期得维护,需求更改都是要花费很大的成本。

因此,PHP 中有一个接口类的说法,接口类:

PHP 接口(interface)的特点

1、接口的方法必须是公开的。

2、接口的方法默认是抽象的,所以不在方法名前面加 abstract。

3、接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样。

4、类可以实现多个接口(相当于把多个功能集于一身,如手机实现了小灵通、MP3、MP4 的功能)

5、接口也可以继承接口。

不多做解释,直接贴代码:

Laravel

图中可以看到,b 类是一个接口类,c,d 继承了 b 类,接口类的具体规则,则可以自己百度一下,代码中,我们延续了,第一图的代码做为修改,把普通类,改为接口类来实现依赖注入,就能解决那个遗留的问题,当依赖注入的类中的方法,改变了,那我们需要做的就是,在原有的类中,创建一个子类,接着写上相同得方法,然后在方法中写上需要的内容和逻辑就行了,当需要得时候,直接实例化,然后注入到需要的类中就行,哪怕是那些类中原有存在的方法都不需要更改。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。