七星揽月

Efforts To Make The Best Of Their……
一口吃不出一个胖子,但胖子却是一口一口吃出来的,只要能每天坚持下来,我相信,一定会有收获的
每天进步一点点
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

PetShop学习(二)

Posted on 2011-04-30 18:18  期星揽月  阅读(500)  评论(0编辑  收藏  举报

        这几天,看完了网友提供的PetShop教程,从里面还真挖掘到了不少好东西,在这里对网友表示感谢,也真诚的道一声辛苦了。同样效仿前人,我也将自己的学习成果在此与大家分享,文笔有限,能力一般,如果存在哪里理解有误,还请大家给以指正,谢谢!

        今天和大家分享的是:工厂模式、反射注入、面向接口编程等知识。

      首先,新建工程,然后添加相关的项目,在我这里,为了方便理解,所建的项目的名称非常直观简洁。分别为UI、BLL、DAL、IBLL、IDAL、Factory、Model共7个项目,其中UI为WEB项目,另外6个为类库。其项目间的关系如下图所示,小字表示的该项目所引用的其他项目,当然,Model贯穿整个项目,哪里需要哪里引用了。

工厂模式层次关系

           Factory为工程项目,在各个项目里面我们引用了IDAL和IBLL,大家都知道,工厂的作用在于能够在不改变项目结构的情况下,实现多个数据库的切换,而我们和数据库交互操作一般都是在DAL层中,而DAL层实现IDAL接口,所以,我们在工厂里面需要创建实现不同数据库操作的IDAL,因此我们需要引用IDAL,而为什么要引用IBLL呢,原因很简单,我们这里是面向接口编程,BLL层我们实现了IBLL,我们要在工程里创建IBLL的实例并返回,所以我们需要引用IBLL。下面我们看一下Factory中 我们做了哪些工作,请看下图:

image

image

            以上分别是创建返回IDAL和IBLL的实例对象,说明一下,Assembly是System.Reflection命名空间下的一个抽象类,我们通过这个类的Load方法来加载程序集,并找到*Path路径下的类文件,因为我们返回的是接口对象,而找到的类以object类型返回,所以我们需要将其进行类型转换。

             IDAL、IBLL都是定义的接口,在此我们就不一一去说了,它们分别是DAL、BLL需要继承的,我们在DAL、BLL中分别来讲。当然,在DAL中,我们实现接口中的方法,并将方法体定义为我们需要完成的业务即可,而在BLL层中,我们实现IBLL接口中的方法,但方法体中,我们会调用DAL中的相关函数来完成业务,所以我们需要创建在BLL中创建DAL的对象,可是我们的DAL是通过接口返回来的,而接口又是通过Factory来得到的,那么我们怎样得到DAL的实例对象呢?请看下图:

image

       我们创建IDAL的接口对象,并通过工厂来得到对象的实例( private static readonly IDAL.IStudent stuDal = Factory.FactoryDAL.CreateStudent();),然后直接通过对象访问即可。

        以上便是从Factory到BLL的整个过程,当在UI中用到时,我们直接调用BLL即可实现。其实,对于工厂的使用,对于IBLL是没什么大的用处的,如果觉得BLL使用接口无意,拿掉也没什么的,当然需要自己理解。好了,就将到这了……会有完整案例,会上传的。