版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PetShop dependency.Add(new SqlCacheDependency(dbName, tableName);,Facade模式,为了方便的创建各自数据表的CacheDependcy,PetShop提供了工厂类DependencyAccess: public static class DependencyAccess public static IPetShopCacheDependency CreateCategoryDependency() public static IPetShopCacheDependency CreateProductDependency() p
2、ublic static IPetShopCacheDependency CreateItemDependency() ,Facade模式,Facade模式,然而对于调用者而言,并不是要获得IPetShopCacheDependency对象,而是存放了正确的Table Name的SqlCacheDependency对象的集合AggregateCacheDependency。 当然,我们可以在创建了IPetShopCacheDependency对象后,调用GetDependency()方法来获得。为了方便调用者,就利用了Faade模式,建立了DependencyFacade类,在工厂类的基础上作
3、了进一步的包装。(见代码),依赖注入,“抽象”的概念非常重要,但不管怎样抽象,最终还是需要具体的实现。例如前面介绍的插入订单的策略,我们提供了IOrderStrategy接口。然而对于BLL层来说,需要插入订单时,我们仍然要创建具体的OrderStrategy对象,也就是说下面的代码是不可避免的: IOrderStrategy orderInsert = new OrderSynchronous(); 这样一来,BBL中仍然为具体的OrderSynchronous对象所制约。,依赖注入,理想的情况是,具体对象的创建永远都不要在代码中实现。也就是说,模块与模块之间的依赖,由原来的内部依赖,转移到
4、外部。 依赖是必须的,一旦转移到外部,就需要将该依赖注入到模块中,这就是所谓的“依赖注入(Dependency Injection)”。 关于“依赖注入”,Martin Fowler有很好的文章来介绍,可以访问:,依赖注入,对于“依赖注入”,有一些轻量级容器已经实现。如Spring,PicoContainer等。在.Net平台下,也有Spring.Net等容器支持。 但究其根本,实际上还是通过反射来完成对依赖的注入,如果不使用这些轻量级容器来专门完成“依赖注入”的话,我们也可以引入反射和xml配置文件来解除模块对具体对象的依赖。 在PetShop中,这种方式随处可见。例如在DALFactory
5、中的DataAccess类(参见代码)。,依赖注入,由于PetShop是一个Asp.Net的应用系统,所以配置信息都可以放在Web.Config文件下。然后,通过ConfigurationManager来获取,例如: private static readonly string orderPath = ConfigurationManager.AppSettingsOrdersDAL; 在Web.config的配置如下: ,依赖注入,如果我们的数据访问层,需要访问Oracle数据库,则只需要修改web.config中的配置: 而DALFactory中的代码根本不需要改变。 这个方法就可以解决前
6、面提到的OrderStrategy的问题。在BBL的Order类中,需要调用IOrderStragety对象,以此来插入订单。方法是: private static readonly PetShop.IBLLStrategy.IOrderStrategy orderInsertStrategy = LoadInsertStrategy();,依赖注入,private static PetShop.IBLLStrategy.IOrderStrategy LoadInsertStrategy() / Look up which strategy to use from config file st
7、ring path = ConfigurationManager.AppSettingsOrderStrategyAssembly; string className = ConfigurationManager.AppSettingsOrderStrategyClass; return (PetShop.IBLLStrategy.IOrderStrategy) Assembly.Load(path).CreateInstance(className); ,依赖注入,IOrderStrategy对象通过LoadInsertStrategy()方法来创建。它读取了配置节OrderStrategyAssembly和OrderStrategyClass,然后利用反射创建该对象。 而在web.config中,配置如下: 如果需要修改插入订单的策略为异步,仅需要修改为: 这样自然就解决了具体对象创建的问题,利用配置文件和反射实现了依赖的注入。,附:,PetShop代码及相关文档链接: PetShop 4.0 download: PetShop 3.0 download: PetShop 4.0是在.Net Framework 2.0下开发的。之前的3.0,2.0版本则可以在.Net F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国会展边缘计算与实时数据处理研究报告
- 中班科学教案秋天来了
- 语文第17课《壶口瀑布》教学设计 2025-2026学年统编版语文八年级下册
- 2026年10以内相邻数测试题及答案
- 2026突发事件面试题及答案
- 2025-2026学年韵律活动方案教案
- 2025-2026学年简单美食教学设计英语
- 2025-2026学年皮肤管理教学设计
- 2025-2026学年教案空白页
- 2025-2026学年泥塑教案幼儿园
- 2026年甘肃事业单位联考笔试易考易错模拟试题(共500题)试卷后附参考答案
- 《化工HSE与清洁生产》课件-项目6 危险化学品
- 2026年六安职业技术学院单招职业适应性考试题库含答案详解(考试直接用)
- 运输企业物流标准化管理制度
- 2026年《禁毒法》知识测试题及答案(全优)
- 2026陕煤集团榆林化学有限责任公司招聘(162人)笔试模拟试题及答案解析
- 人工智能与文学创作的未来
- 【544】人际心理治疗(IPT)
- 2026中国藏语系高级佛学院招聘应届高校毕业生6人考试备考试题及答案解析
- 2026年春季学期统编版三年级下册语文教学计划(含进度表)(2024新教材)
- 2023年边缘计算相关项目实施方案
评论
0/150
提交评论