zoukankan      html  css  js  c++  java
  • 范例-项目-.NET-PetShop-4.0-架构设计:依赖注入

    ylbtech-范例-项目-.NET-PetShop-4.0-架构设计:依赖注入
    1. 依赖注入返回顶部
    1、

    依赖注入

    • “抽象”的概念非常重要,但不管怎样抽象,最终还是需要具体的实现。例如前面介绍的插入订单的策略,我们提供了IOrderStrategy接口。然而对于BLL层来说,需要插入订单时,我们仍然要创建具体的OrderStrategy对象,也就是说下面的代码是不可避免的:
    • IOrderStrategy orderInsert = new OrderSynchronous();
    • 这样一来,BBL中仍然为具体的OrderSynchronous对象所制约
    2、
    • 理想的情况是,具体对象的创建永远都不要在代码中实现。也就是说,模块与模块之间的依赖,由原来的内部依赖,转移到外部
    • 依赖是必须的一旦转移到外部,就需要将该依赖注入到模块中,这就是所谓的“依赖注入(Dependency Injection)”。
    • 关于“依赖注入”,Martin Fowler有很好的文章来介绍,可以访问:http://martinfowler.com/articles/injection.html
    • 对于“依赖注入”,有一些轻量级容器已经实现。如Spring,PicoContainer等。在.Net平台下,也有Spring.Net等容器支持。
    • 但究其根本,实际上还是通过反射来完成对依赖的注入,如果不使用这些轻量级容器来专门完成“依赖注入”的话,我们也可以引入反射和xml配置文件来解除模块对具体对象的依赖
    • 在PetShop中,这种方式随处可见。例如在DALFactory中的DataAccess类(参见代码)。
    3、
    • 由于PetShop是一个Asp.Net的应用系统,所以配置信息都可以放在Web.Config文件下。然后,通过ConfigurationManager来获取,例如:
    • private static readonly string orderPath = ConfigurationManager.AppSettings["OrdersDAL"];
    • 在Web.config的配置如下:
    • <add key="OrdersDAL" value="PetShop.SQLServerDAL"/>
    4、
    • 如果我们的数据访问层,需要访问Oracle数据库,则只需要修改web.config中的配置
    • <add key="OrdersDAL" value="PetShop.OracleDAL"/>
    • 而DALFactory中的代码根本不需要改变。
    • 这个方法就可以解决前面提到的OrderStrategy的问题。在BBL的Order类中,需要调用IOrderStragety对象,以此来插入订单。方法是:
    • private static readonly PetShop.IBLLStrategy.IOrderStrategy orderInsertStrategy = LoadInsertStrategy();
    5、
    private static PetShop.IBLLStrategy.IOrderStrategy LoadInsertStrategy() 
    {
          // Look up which strategy to use from config file
          string path = ConfigurationManager.AppSettings["OrderStrategyAssembly"];
          string className = ConfigurationManager.AppSettings["OrderStrategyClass"];
    
          return (PetShop.IBLLStrategy.IOrderStrategy)Assembly.Load(path).CreateInstance(className);
    }
    6、
    • IOrderStrategy对象通过LoadInsertStrategy()方法来创建。它读取了配置节OrderStrategyAssembly和OrderStrategyClass,然后利用反射创建该对象
    • 而在web.config中,配置如下:
    • <add key="OrderStrategyAssembly" value="PetShop.BLL"/>
    • <add key="OrderStrategyClass" value="PetShop.BLL.OrderSynchronous"/>
    • 如果需要修改插入订单的策略为异步,仅需要修改为
    • <add key="OrderStrategyClass" value="PetShop.BLL. OrderAsynchronous"/>
    • 这样自然就解决了具体对象创建的问题,利用配置文件和反射实现了依赖的注入
    7、
    2.返回顶部
     
    3.返回顶部
     
    4. 附返回顶部
    1、附

    PetShop代码及相关文档链接:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet.asp
    PetShop 4.0 download:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp
    PetShop 3.0 download:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet3.asp
    PetShop 4.0是在.Net Framework 2.0下开发的。之前的3.0,2.0版本则可以在.Net Framework 1.x下运行。
    如果是.Net 1.x,建议参考PetShop 3.0
    PetShop 4.0引入了许多.Net 2.0具有的特性,如泛型、Transacation、Asp.Net 2.0 MemberShip等特性。

    2、
    5.返回顶部
     
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    内核知识第六讲,内核编写规范,以及获取GDT表
    VS2015配置内核WDK7600环境,32位下.
    FTP服务器中vsftpd主配置文件解析
    DHCP配置部分
    Tomcat(.jsp)
    版本控制工具(上)——Git的基本使用
    【Hutool】Hutool工具类之随机工具——RandomUtil
    IDEA阿里Java规范插件的安装
    【Hutool】Hutool工具类之Http工具——HttpUtil
    sublime_text3常用操作与快捷键
  • 原文地址:https://www.cnblogs.com/storebook/p/12669868.html
Copyright © 2011-2022 走看看