• 企业开发框架NHibernate和Spring.Net简介2


    企业开发框架NHibernate和Spring.Net简介-2
    2008-03-24 13:58

    1.5.3 Spring.Net介绍

    Spring框架由一个容器,一个配置和组织组件的框架,和一组内置的为事务、持久化和Web用户接口提供的服务组成。Spring.Net是一个关注于.NET企业应用开发的应用程序框架,它能够提供非常丰富的功能,例如依赖注入(Dependency Injection),面向方面编程(Aspect Oriented Programming),数据访问抽象以及ASP.NET集成等。Spring.NET脱胎于Java的Spring框架,其1.0版包括了一个功能完整的反转控制容器和AOP函数库,在后续的版本中将包含对ASP.NET、Remoting和数据访问的支持。Spring.Net的框架如图1-53所示。

    图1-53 Spring.Net的框架图
    1.控制反转
    控制反转(IoC,Inversion of Control)意味着将设计好的交给系统去控制,而不是在自己的类内部控制。
    IoC是近年来兴起的一种思想,主要是协调各组件间相互的依赖关系,同时大大提高了组件的可移植性,组件的重用机会也变得更多。在传统的实现中,由程序内部代码来控制程序之间的关系。我们经常使用new关键字来实现两组键间关系的组合,这种实现地方式会造成组件之间耦合(一个好的设计,不但要实现代码重用,还要将组件间关系解耦)。IoC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。
    分离关注(Separation of Concerns:SOC)是产生IoC模式和AOP的最原始动力,通过功能分解可得到关注点,这些关注可以是组件、方面或服务。
    GOF设计模式中,我们已经习惯一种思维编程方式——接口驱动。接口驱动有很多好处,可以提供灵活的子类实现,增加代码稳定和健壮性等,但是接口一定是需要实现的,即如下语句一定要执行。
    AInterface a = new AInterfaceImp();
    AInterfaceImp是接口AInterface的子类,Ioc模式可以根据需要延缓接口的实现,有个比喻:接口如同空的模型套,在必要时向模型套注射石膏,成为一个模型实体。可以人为控制接口的实现完成“注射”。
    IoC的实现方式有以下几种:
    *    基于接口的(Interface-based IoC,Type-1)。
    *    基于设值的(Setter-based IoC,Type-2)。
    *    基于构造的(Construtor-based IoC,Type-3)。
    下面通过简单的例子分别介绍上述几种实现方式。
    (1)Type-1。基于接口的设计方法通常是利用接口将调用者与实现者分离。
    #001 public class Sport {
    #002 private InterfaceBall ball; //InterfaceBall是定义的接口
    #003 public void init() {
    #004 //Basketball实现了InterfaceBall接口
    #005 ball = (InterfaceBall) Class.forName("Basketball").newInstance();}
    #006 }
    Sport类在编译期依赖于InterfaceBall的实现,为了将调用者与实现者分离,可以动态生成Basketball类并将其强制类型转换为InterfaceBall。
    (2)Type-2。基于设值的设计方法是通过在类中暴露setter方法来实现依赖关系。
    #001 public class Sport {
    #002 private InterfaceBall _ball;
    #003 public InterfaceBal1 ball
    #004 {
    #005     set{ _ball = value ;} }
    #006 }
    Spring.NET就是实现了该类型的轻量级容器。
    (3)Type-3。通过构造方法完成依赖关系。
    #001 public class Sport {
    #002 private InterfaceBall ball;
    #003 public Sport(InterfaceBall arg) {
    #004 ball = arg; }
    #005 }
    由于Type-3在构造期就形成了对象的依赖关系,所以对对象的重用变得困难。有些框架需要组件提供一个默认的构造方法,此时就显现出Type-3的局限性。通常所有的参数都是通过构造方法注入的,当对象间的依赖关系较多时,构造方法就显得比较复杂,不利于单元测试。PicoContainer就是实现了Type-3依赖注入模式的轻量级容器。
    2.Spring.NET库
    Spring.NET库有6个基本组成部分,基本上涵盖了Spring.NET框架的所有功能结构。
    *    Spring.Core库是Spring.NET框架最基础的部分,它提供了依赖注入的功能。Spring.NET中大部分的函数库都依赖于这个核心库提供的功能,或者是对核心库的扩展。IObjectFactory是核心容器接口,负责管理容器内的注入对象,而IApplicationContext则是IObjectFactory的继承,它扩展了一些功能。
    *    Spring.Aop库为商业逻辑对象提供了面向方面编程的支持,它为创建企业应用和为商业对象提供服务打下了基础,是Spring核心库中IoC容器的补充。
    *    Spring.Web库为ASP.NET增加了很多功能,例如ASP.NET页面的依赖注入,数据双向绑定,为ASP.NET提供母版页功能,增强了本地化支持。所有的这些都是对ASP.NET很好的扩展。
    *    Spring.Services库可以将任何一个“普通”对象(“普通”是指该对象不是继承自特殊服务的基类)暴露成为一个企业应用(COM+)或者远程对象。因为对依赖注入和原数据属性重载的支持,.NET 中的Web服务会获得更好的配置上的灵活性。同样,该库也提供了对Windows服务的支持。
    *    Spring.Data库为.NET提供了一个数据访问层的抽象,它能够用于从ADO.NET到多种ORM Provider的数据访问提供者。它同时包含了一个ADO.NET抽象层,简化了对ADO.NET的编码和事务管理。
    *    Spring.ORM库提供了一个用于常见的对象—关系映射库的综合层,它提供了诸如对事务管理的支持等功能。
  • 相关阅读:
    史上最详细 github 使用教程(英文烂的血泪史)
    如何解决跨域问题
    KSImageNamed 安装
    VVDocumenter插件安装
    通过appearance设置app主题
    UITableViewCell注册情况
    iOS9.2 xcode 7.1.1真机测试
    UIAlertController iOS9
    Values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead
    GIT
  • 原文地址:https://www.cnblogs.com/kedach/p/1284864.html
Copyright © 2020-2023  润新知