码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-04-02 13:47:29      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:UNC   inject   control   个数   blank   under   ons   org   网上   

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

控制反转(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 理解控制反转和依赖注入

标签:UNC   inject   control   个数   blank   under   ons   org   网上   

原文地址:https://www.cnblogs.com/25-lH/p/8688125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!