导读:
当人们面对复杂问题时应该何去何从?一种最为常用解决问题的方法便是分而治之,也就是将一个复杂问题分解为可以解决的小问题。这种思想在软件开发中得到了大量的应用,在软件架构方面的表现之一就是分层的思想。关于分层优劣的讨论,Martin Fowler在《企业应用架构模式》的第一章进行了深入的论述。
面对具体应用时,我们应该如何设计层次呢?DIP(Dependency Inversion Principle,依赖倒置原则)为我们指出了一个方向:
a 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
b 抽象不应该依赖于细节,细节应该依赖于抽象
之所以称之为“倒置”,因为在传统的结构化程序设计中,高层模块总是依赖于低层模块,而在面向对象程序设计中,其结构相对而言,是被“倒置”了。关于DIP更详细的讨论,可以参考Robert Martin的《敏捷软件开发》第11章。
当我们的应用抽象层次提高到足够通用时,实际上就产生了一个框架,因此,框架代表的是一种抽象。就像抽象类无法实例化对象一样,单独的框架并不具备任何意义,只有当我们使用这个框架,补充抽象中缺失的具体细节时,这个框架才是具备了活力。
使用通常意义的库时,我们是作为主控方,控制着所有逻辑,而在使用一个框架时,我们所编写的部分是作为框架的细节补充到框架之中的,而框架本身已经定义好了它的逻辑,控制权是掌控在框架的手中。抽象控制着具体,这也就是框架之所以为框架的生存之本。同使用库的时候截然不同,这种控制关系就是将我们通常习惯的控制关系“倒置”了。没错,这就是IoC(Inversion of Control)。因此,Martin Fowler在他的那篇大名鼎鼎的《IoC容器和DependencyInjection模式》才会提出IoC是框架所共有的特征,也正是基于这样的原因,针对许多轻量级容器解决实际上是依赖关系的特点,他才提出Dependency Injection,以正视听。
本文转自
http://dreamhead.blogbus.com/logs/2005/05/1222803.html
分享到:
相关推荐
IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解
IoC对象实例IoC对象实例IoC对象实例
IOC模式 c#经典例子 IOC 例子 IOC模式 c#经典例子 IOC 例子 IOC模式 c#经典例子 IOC 例子
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC的原理和源码。 详细内容见博文: 【SSH进阶之路】一步步重构容器实现Spring的IoC——从一个...
spring ioc.jar springioc必备开发工具包
SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码
主要为大家详细解析了Spring中IoC优点与缺点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Spring通过注解实现IOC,Spring通过注解实现IOC,Spring通过注解实现IOC
Spring ioc Spring ioc
spring-IOC的一些笔记心得
自己使用xpath解析xml文件实现依赖注入功能
介绍下spring的ioc和aop的定义
Mvc+IOC 、多层架构Mvc+IOC 、多层架构Mvc+IOC 、多层架构
这是一个C#实现的简单IOC例子,用来练习IOC实现原理,了解容器机制
模仿spring ioc原理,实现通过xml、注解两种方式配置bean,并可通过注解注入bean。
Spring IOC基础jar包
Spring的IOC原理 Spring的IOC原理
自己动手实现IOC容器的demo,帮助理解和学习spring IOC容器的基本原理和实现,适合学过或者用过spring的java玩家