IoC = Inversion of Control DI = Dependency Injection
Posted on 2008-05-04 22:44 Andrew Yin 阅读(428) 评论(1) 收藏 举报对于初次接触这些概念的初学者,不免会一头雾水。正如笔者第一次看到这些名词一样,一阵窘迫……IT界不亏是哄抢眼球的行业,每个新出现的语汇都如此迷离。好在我们也同时拥有Internet这个最广博的信息来源。
IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
正在业界为IoC争吵不休时,大师级人物Martin Fowler也站出来发话,以一篇经典文章《Inversion of Control Containers and the Dependency Injection pattern》为IoC正名,至此,IoC又获得了一个新的名字:“依赖注入 (Dependency Injection)”。
相对IoC 而言,“依赖注入”的确更加准确的描述了这种古老而又时兴的设计理念。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
举一个很简单的例子:IBM T40笔记本电脑一台、USB硬盘和U盘各一只。笔记本电脑与外围存储设备通过预先指定的一个接口(USB)相连,对于笔记本而言,只是将用户指定的数据发送到USB接口,而这些数据何去何从,则由当前接入的USB设备决定。在USB设备加载之前,笔记本不可能预料用户将在USB接口上接入何种设备,只有USB设备接入之后,这种设备之间的依赖关系才开始形成。
对应上面关于依赖注入机制的描述,在运行时(系统开机,USB 设备加载)由容器(运行在笔记本中的Windows操作系统)将依赖关系(笔记本依赖USB设备进行数据存取)注入到组件中(Windows文件访问组件)。
这就是依赖注入模式在现实世界中的一个版本。
浙公网安备 33010602011771号