“依赖注入”学习笔记

       Phalcon使用手册中有谈到“使用依赖注入”,依赖注入的概念,对于学过JAVA的人来说,应该比较熟悉。依赖注入(Dependency Injection,简称DI),早期被称作控制反转(Inversion of control,简称IOC)。

       首先了解一下OO编程中的依赖关系:只要A类型中用到了B类型实例,A就依赖于B。而“依赖注入”这种设计模式则能消除AB之间的直接依赖关系。其实,依赖注入就是用来削减程序的耦合问题的,也就是解除强依赖,它被称为目前最优秀的解耦方式。

       不过,解除强依赖,并非是AB之间的依赖关系不复存在了,而实际上A总是还需要B提供的服务,因此只是把这种依赖的建立时间推后了,从编译器推迟到运行时了。换言之,即是在运行的时候才产生AB之间的依赖关系,把这种依赖关系在一个合适的时机“注入”运行时。

       此外,AB之间的关系,亦可抽象至“服务使用者”和“服务提供者”的角度,体现目前SOAservice-oriented architecture)的设计思路。另外来看,也可把A看作是需要构建的主系统,而B则是A系统中的Plugin,主系统A并不强依赖与任何一个Plugin,但一旦Plugin被加载,主系统便调用适当Plugin的功能。

       Phalcon中,它的依赖注入容器也是一个非常重要的概念。一个服务容器就相当于一个袋子,用于存储我们将要用到的一些服务,每当框架需要一个组件,将要求服务容器首先注册这个服务组件。Phalcon是一个高度松耦合的框架,Phalcon\DI 将使这些要用到的服务组件透明的结合在一起。Phalcon\DI 是一个实现了服务的依赖注入功能的组件,它本身也是一个容器。容器作为全局注册表,使用容器的依赖注入做为一种桥梁来解决依赖可以使我们的代码耦合度更低,很好的降低了组件的复杂性。