zoukankan      html  css  js  c++  java
  • 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 = 'MDatabase\'.$driver_name;
    
            $this->_driver = MIoC::construct($driver_class, $dsn, $username, $password, $options);  
      }

    _driver 就是具体的数据库服务

    --

    如果还是不能理解

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

    --

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

    --

    依赖注入

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

    在详细看的话,就是

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

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

    --

    控制反转

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

    --

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

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

    理解依赖注入与控制反转

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

    可以看看 Laravel 的实现

    Laravel 控制反转

  • 相关阅读:
    计算机基础理论 基本功
    mac 下使用gcc 编译c函数
    技术书籍 读书方法有感
    IntentFilter的相关问题解析
    IOS 学习笔记 2015-04-03 OC-API-文件读写
    (转)iOS中3种正则表达式的使用与比较
    (转)IOS学习笔记-2015-03-29 int、long、long long取值范围
    mysql 游标
    (转) 生活感悟
    IOS 学习笔记 2015-03-27 我理解的OC-代理模式
  • 原文地址:https://www.cnblogs.com/25-lH/p/8688125.html
Copyright © 2011-2022 走看看