DIP、IOC、DI

定义html

DIP(Dependence Inversion Principle):依赖(就是用到涉及到)倒置原则,高层模块(抽象层级较高,包括的范围较广,比较抽象)依赖底层模块的具体事物,底层发生变更的时候会牵连到高层,这是耦合很重的设计,破坏了开闭原则,而高层模块依赖抽象,底层模块一样依赖抽象(经过抽象在高低层之间通讯,没有直接的依赖,都依赖抽象,固然抽象自己应该要是稳定的)就会避免这样的问题,总结为第一条规则:高层模块不该该依赖低层模块,他们都应该依赖抽象。倒置一说就是避免人的惯性思惟带来的耦合重的缺点,让本来依赖具体的思惟方式改为依赖抽象,总结为第二条规则:抽象不依赖具体,而具体依赖抽象。angularjs

IOC(Inversion of Control):控制反转,为两个相互依赖的组件提供抽象,将底层依赖的对象(来自高层)交给第三方系统来控制,引入了第三方控制系统,而不是普通的经过NEW的方式来获取对象。设计模式

DI(Denpdency Injection):依赖注入,将依赖对象的建立放到被依赖对象外部实现。把依赖关系包装到构造函数或者其余方法中,经过这种在外部提供内部依赖对象的方式,好像从外往里面注入了依赖对象。注入的方式有不少,构造函数,经过构造函数传参将依赖对象注入进去;属性注入,经过设置对象的属性来注入依赖对象;接口注入,提供一个具备注入依赖对象的方法契约的接口,被依赖的对象实现该接口,而且调用接口方法设置依赖对象。前面集中是手动方式设置依赖对象,经过IOC容器动态建立注入依赖对象,IOC容器有如下功能:动态建立、注入依赖对象;管理对象生命周期;映射依赖关系,以下:

框架

public class FacadeFactory
    {
        public static T GetObject<T>() where T : IBaseFacade
        {
            IApplicationContext ctx = ContextRegistry.GetContext("Promocode.Facade");
            return (T)ctx.GetObject(typeof(T).Name);            
        }
    } //这是IOC容器
 
//这是抽象与具体的映射(依赖)关系
<object id="IMyCouponFacade" type="Payment.Promocode.Facade.MyCouponFacade, Payment.Promocode.Facade" />
<object id="IMyCouponBackManagerFacade" type="Payment.Promocode.Facade.MyCouponBackManagerFacade, Payment.Promocode.Facade" />

区别与联系函数

DIP是软件设计原则,告诉咱们的是对错,不是具体如何作,IOC是设计模式,是软件开发中总结出来的可重用的解决方案,能够解决一些实际问题。DI是IOC的具体实现方式之一,IOC容器是DI构造注入的框架。url

 
同时能够对比看 angularjs的依赖注入:
参考:http://blog.csdn.net/renfufei/article/details/19038123 
相关文章
相关标签/搜索