zoukankan      html  css  js  c++  java
  • 依赖注入学习笔记(二)深入浅出依赖注入

    学习资料来源:https://learnku.com/articles/10928/deep-inflow-of-dependency-injection

    1、什么是「组件」和「服务」

    所谓的「依赖」就是指在实现某个功能模块时需要使用另外一个(或多个)「组件」或「服务」,那么这个所需的「组件」或「服务」将被称为「依赖」。

    「组件」:它是可能被作者无法控制的其它应用使用,但使用者不能对其源码进行修改的一个功能模块。

    「服务」指:使用者以同步(或异步)请求远程接口来远程使用的一个功能接口。

    「组件」和「服务」的 共同之处:就是它们都将被其他应用程序或功能模块使用。

    它们的不同之处在于:

    • 「组件」是在本地使用(如 jar 文件、dll 或者源码导入)
    • 「服务」是在远程使用(如 WebService、消息系统、RPC 或者 Socket)

    2、什么是控制反转和依赖注入?

    控制反转定义:
    「控制反转」提供了将「插件」组合进模块的能力。 在实现「控制反转」过程中我们「反转」了哪方面的「控制」呢?其实这里的「反转」的意义就是 如何去定位「插件」的具体实现。
    采用「控制反转」模式时,我们通过一个组装模块,将「插件」的具体实现「注入」到模块中就可以了。

    个人理解:

    这有点像实现类的多态,组件的多态么?

    依赖注入的目标:
    
    「依赖注入」就是为了完成这样的 目标:将 依赖组件 的配置和使用分离开,以降低使用者与依赖之间的耦合度。
    
    依赖注入的定义:
    
    应用程序对需要使用的依赖「插件」在编译(编码)阶段仅依赖于接口的定义,到运行阶段由一个独立的组装模块(容器)完成对实现类的实例化工作,
    并将其「注射」到应用程序中称之为「依赖注入」。

    个人理解:

    这感觉是面向接口开发???定义好接口,只要注入的依赖组件依赖该接口便可以实现注入。

    3、什么是依赖注入容器


    上面实现依赖注入的过程仅仅可以当做一个演示,真实的项目中肯定没有这样使用的。那么我们在项目中该如何去实现依赖注入呢?

    看到上面这句话。老子信了你的邪。我好像就是这样做的。

    定义:

    由一个独立的组装模块(容器)完成对实现类的实例化工作,那么这个组装模块就是「依赖注入容器」。
    
    <?php
    class Container
    {
        public function getStorage()
        {
            return new SessionStorage();
        }
    
        public function getUser()
        {
            $user = new User($this->getStorage());
            return $user;
        }
    }
    //调用
    $container = new Container();
    $user = $container->getUser();

    思考:如何将实现类相关数据写入到配置文件中,并在容器中实例化从配置文件中读取。

    个人理解:可以利用框架的服务器容器,使用自己创建的组件,这时候就要去看框架的服务器容器的使用,和创建组件规则了。学习学习。

    4、依赖注入的优缺点

    选择通过构造函数注入:

    • 能够在构造阶段就创建完整、合法的对象;
    • 带有参数的构造子可以明确地告诉你如何创建一个合法的对象;
    • 可以隐藏任何不可变的字段。

    选择通过 setter 设值方法注入:

    • 如果依赖的「插件」太多时,选择设值注入更优

    个人理解:

    很高大上,只求会使用,想要设计可能要有成熟的框架思想。

  • 相关阅读:
    2017《面向对象程序设计》课程作业八
    2017《面向对象程序设计》课程作业七
    第六次作业
    2017《面向对象程序设计》课程作业五
    课程作业四
    2017《面向对象程序设计》课程作业三
    2017《面向对象程序设计》课程作业二
    2017《面向对象程序设计》课程作业一
    20200924 次小生成树
    水文章_考拉
  • 原文地址:https://www.cnblogs.com/jiangxiaochang/p/10906870.html
Copyright © 2011-2022 走看看