导读:
DIP,IOC设计模式
David.Zhu 2005/6/25
1.DIP or IOC
DIP(Dependency Inversion Principle,依赖倒置原则)为我们指出了一个方向:
a. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
b. 抽象不应该依赖于细节,细节应该依赖于抽象
之所以称之为“倒置”,因为在传统的结构化程序设计中,高层模块总是依赖于低层模块,
而在面向对象程序设计中,其结构相对而言,是被“倒置”了。关于DIP更详细的讨论,可以参考
Robert Martin的《敏捷软件开发》第11章。
当我们的应用抽象层次提高到足够通用时,实际上就产生了一个框架,因此,框架代表的是一种
抽象。就像抽象类无法实例化对象一样,单独的框架并不具备任何意义,只有当我们使用这个框架,
补充抽象中缺失的具体细节时,这个框架才是具备了活力。
使用通常意义的库时,我们是作为主控方,控制着所有逻辑,而在使用一个框架时,我们所编写
的部分是作为框架的细节补充到框架之中的,而框架本身已经定义好了它的逻辑,控制权是掌控在框
架的手中。抽象控制着具体,这也就是框架之所以为框架的生存之本。同使用库的时候截然不同,这
种控制关系就是将我们通常习惯的控制关系“倒置”了。没错,这就是IoC(Inversion of Control) 因此,Martin Fowler在他的那篇大名鼎鼎的《IoC容器和DependencyInjection模式》才会提出IoC是框架所共有的特征,也正是基于这样的原因,针对许多轻量级容器解决实际上是依赖关系的特点,他才提出Dependency Injection,以正视听。
IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。
2.Robert C Martin给出的"Bad Design"的定义
Rigidity:系统很难改变,因为每一处改变都会影响系统的许多其它的部分
Fragility:当你对系统做一下改变的时候,系统中与修改部分看起来不相关的另外一部分不工作了
Immobility:系统很难重用到另外一个应用中去,因为你很难将要重用的部分从系统中分离开来
3.IoC类型
Constructor Injection
http://picocontainer.org/Constructor+Injection
Setter Injection
http://picocontainer.org/Setter+Injection
Contextualized Lookup
http://picocontainer.org/Contextualized+Lookup
3.参考文档
[1].思考IoC
http://dreamhead.blogbus.com/logs/2005/05/1222803.html
[2].Ioc模式解析
http://tech.ccidnet.com/pub/article/c1060_a171997_p1.html
[3].介绍 IOC
http://www.matrix.org.cn/resource/article/890.html
[4].DIP, Robert C Martin, Bob大叔的优秀论文
http://www.objectmentor.com/resources/articles/dip.pdf
[5].pico Container
http://picocontainer.org/
本文转自
http://davidripple.bokee.com/2059075.html
DIP,IOC设计模式
David.Zhu 2005/6/25
1.DIP or IOC
DIP(Dependency Inversion Principle,依赖倒置原则)为我们指出了一个方向:
a. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
b. 抽象不应该依赖于细节,细节应该依赖于抽象
之所以称之为“倒置”,因为在传统的结构化程序设计中,高层模块总是依赖于低层模块,
而在面向对象程序设计中,其结构相对而言,是被“倒置”了。关于DIP更详细的讨论,可以参考
Robert Martin的《敏捷软件开发》第11章。
当我们的应用抽象层次提高到足够通用时,实际上就产生了一个框架,因此,框架代表的是一种
抽象。就像抽象类无法实例化对象一样,单独的框架并不具备任何意义,只有当我们使用这个框架,
补充抽象中缺失的具体细节时,这个框架才是具备了活力。
使用通常意义的库时,我们是作为主控方,控制着所有逻辑,而在使用一个框架时,我们所编写
的部分是作为框架的细节补充到框架之中的,而框架本身已经定义好了它的逻辑,控制权是掌控在框
架的手中。抽象控制着具体,这也就是框架之所以为框架的生存之本。同使用库的时候截然不同,这
种控制关系就是将我们通常习惯的控制关系“倒置”了。没错,这就是IoC(Inversion of Control) 因此,Martin Fowler在他的那篇大名鼎鼎的《IoC容器和DependencyInjection模式》才会提出IoC是框架所共有的特征,也正是基于这样的原因,针对许多轻量级容器解决实际上是依赖关系的特点,他才提出Dependency Injection,以正视听。
IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。
2.Robert C Martin给出的"Bad Design"的定义
Rigidity:系统很难改变,因为每一处改变都会影响系统的许多其它的部分
Fragility:当你对系统做一下改变的时候,系统中与修改部分看起来不相关的另外一部分不工作了
Immobility:系统很难重用到另外一个应用中去,因为你很难将要重用的部分从系统中分离开来
3.IoC类型
Constructor Injection
http://picocontainer.org/Constructor+Injection
Setter Injection
http://picocontainer.org/Setter+Injection
Contextualized Lookup
http://picocontainer.org/Contextualized+Lookup
3.参考文档
[1].思考IoC
http://dreamhead.blogbus.com/logs/2005/05/1222803.html
[2].Ioc模式解析
http://tech.ccidnet.com/pub/article/c1060_a171997_p1.html
[3].介绍 IOC
http://www.matrix.org.cn/resource/article/890.html
[4].DIP, Robert C Martin, Bob大叔的优秀论文
http://www.objectmentor.com/resources/articles/dip.pdf
[5].pico Container
http://picocontainer.org/
本文转自
http://davidripple.bokee.com/2059075.html