依赖注入学习笔记(一)认识依赖注入
1、什么是依赖注入:http://blog.phpzendo.com/?p=313
笔记摘要:
所谓的「依赖」就是指在实现某个功能模块时需要使用另外一个(或多个)「组件」或「服务」,那么这个所需的「组件」或「服务」将被称为「依赖」。
「依赖注入」通过以构造函数参数,设值方法或属性字段等方式将具体组件传递给依赖方。
以构造函数的方式注入:
<?php class User { public function __construct($storage) { $this->storage = $storage; } // ... } $storage = new SessionStorage('SESSION_ID'); $user = new User($storage);
其他注入形式:
以设值方法注入
<?php class User { public function setSessionStorage($storage) { $this->storage = $storage; } }
以类成员变量方式注入:
<?php class User { public $sessionStorage; } $user->sessionStorage = $storage;
通过构造函数注入适用于必要的依赖,如上例;设值注入适用于可选的依赖,如项目需要一个缓存功能的实现。
个人理解:
依赖注入用于类的解耦,可以提高代码的重复利用率,特别是组件或工具类的重复利用率。学习依赖注入对自身业务代码的封装理解可以有一个新的认识
2、依赖注入容器 http://blog.phpzendo.com/?p=318
「依赖注入容器」用于管理依赖的对象实例:包含依赖组件的实例化和对组件所需配置的管理。
个人理解:
外部调用组件时,只要配置参数,利用注入容器实例化组件,但作者举的例子只帮我理解依赖注入容器的原理,没有告诉我依赖注入容器使用的场景。
一般使用「依赖注入」就够了,极少数情况需要使用「依赖注入容器」。 仅当需要管理大量依赖组件的实例时,才能真正体现「依赖注入容器」的价值(比如一个框架)。
看了文章开头。。。。也许是我还没有用到依赖注入容器需要吧~~~
使用依赖注入的目的:
「依赖注入」就是为了完成这样的目标:将 依赖组件 的配置和使用分离开,以降低使用者与依赖之间的耦合度。