2018/04/01 理解控制反转和依赖注入

Posted Zzz哈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018/04/01 理解控制反转和依赖注入相关的知识,希望对你有一定的参考价值。

首先,控制反转和依赖注入不是一种编码,是一种设计的思想。实现的方式也有很多。

控制反转(IOC)是一种思想,依赖注入(DI)是实施这种思想的方法。

具体的概念也不多赘述,网上一搜一大片对于这方面的知识的讲解,这里只说一下我对它的理解。

--

先刨除这个概念,单单思考一个问题,如果你需要连接一个mysql数据库,你需要怎么做?

以下均为伪代码

function __construct()
{
    // 连接Mysql数据库
}

--

这也没什么问题,对吧。

假如我们换一个 mariadb 数据库呢?

function __construct()
{
    // 连接Mariadb数据库
}

--

也没什么问题,那我这两个数据库都有呢?

去程序上切?(⊙o⊙)…

--

为了解决这种问题,我们才会使用到 控制反转 和 依赖注入

首先,我们知道,数据库SQL是不变的。变的是使用什么数据库对吧?

那么我们把这个可以组合SQL的叫做 【容器】,把需要使用的 数据库 【注入到容器里】

 public function __construct($dsn, $username = null, $password = null, $options = null ) {

        list($driver_name) = explode(\':\', $dsn, 2);

        // 定义driver判断数据库类型--可扩展为其他数据库
        $driver_class = \'\\M\\Database\\\\\'.$driver_name;

        $this->_driver = \\M\\IoC::construct($driver_class, $dsn, $username, $password, $options);  
  }

_driver 就是具体的数据库服务

--

如果还是不能理解

那我推荐这篇文章 简单解释什么是 依赖注入 和 控制反转

--

如果感觉可以,那这里引入 控制反转和依赖注入 的概念

--

依赖注入

看SQL组合,他需要一个服务被注入进来才能使用,没有无法使用,没有你,我无法生存。就是依赖注入。

在详细看的话,就是

首先,数据库服务和SQL不在是强依赖关系。

SQL服务是由外部给与的,自己本身并没有能力,SQL和数据库服务是有依赖的,但是这个依赖是外部给予,因此我们可以说是由外部注入给他的,所以这就叫 依赖注入。

--

控制反转

而反过来说,具有何种数据库服务不是他内部自身控制的,而是由外部控制的,相当于将数据库服务具是何种交给了外部,外部来决定程序该有的超能力,所以服务的控制权被由自身控制反转为外部控制,这被称为 控制反转。

--

我的文字功底真的很差,现在真的很佩服写的很清晰的人。

如果感觉还是感觉有点不太明白,推荐几篇文章吧,我觉得很好的

理解依赖注入与控制反转

PHP控制反转(IOC)和依赖注入(DI)

可以看看 Laravel 的实现

Laravel 控制反转

以上是关于2018/04/01 理解控制反转和依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

IOC 控制反转Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )(代码片

PHP依赖注入,控制反转,反射Ioc容器和服务提供者各个概念的理解和使用

PHP依赖注入,控制反转,反射Ioc容器和服务提供者各个概念的理解和使用

spring依赖注入,和控制反转。用自己的话说是怎么说的。最好能够用代码来解释

c#依赖注入和控制反转的书籍

如何理解 PHP的依赖注入(DI) 和 控制反转(IoC)