PetShop4.0架构分析及工厂模式的使用

来源:互联网 发布:吴宗宪淘宝直播回放 编辑:程序博客网 时间:2024/04/29 04:00

最近几天一直在看Mirosoft发布的PetShop4.0,主要研究了一下其中对于反射工厂的使用以及架构的设计,感觉有所得,特记下本文与大家分享,不到之处欢迎拍砖。

PetShop4.0中对于工厂模式进行了非常经典的使用,其中主要是一下类的工程配合使用,构成数据访问工厂:

1  IDAL层:主要负责对于数据访问层进行接口的定义,模块中相应的方法全部在这一层中进行声明。

2  DAL层:继承IDAL层后,负责实现接口层中所有的方法。

FactoryManagement层:继承IDAL,通过反射的方法获取相应的类对象(DAL),并将DAL强制转换成接口类(IDAL)返回。

4 BLL层:继承FactoryManagement层,获取接口类(IDAL),从而调用该IDAL下的方法。由于这里的IDAL对象实际上是一个指向其对应DAL的指针,所以它的所有方法都是已经被实现了的,调用的时候无障碍。

具体实现流程:

在IDAL接口层中定义模块中所需方法,然后DAL进行IDAL接口类的继承。由于DAL层是针对多方向的,所以继承IDAL接口类的数据访问类可能会是多个。例如最基本的数据访问类,SQLServerDAL和OracleServerDAL,都继承了ServerIDAL接口类。

数据访问工厂FactoryManagement,通过读取Web.config配置文件中的信息获取需要承载的DAL,通过反射的方法将指定的程序集进行承载:(接口类名)Assembly.Load(加载的DAL的命名空间).CreateInstance(加载的DAL的命名空间.类名) 。这方返回的数据访问接口实际上是一个指向数据访问类的接口类,由于类属于引用类型,所以我将这里接口类理解为指向相应数据访问类的指针。

DAL继承了数据访问工厂FactoryManagement,通过调用FactoryManagement中的方法(即上面描述的方法)创建数据访问接口类IDAL,从而可以获取接口类中所有的业务逻辑方法。

BLL业务逻辑层继承了DAL数据访问层,为不同的函数调用DAL中相应的业务逻辑实现,保证了业务逻辑层与具体实现的松耦合,业务逻辑层根本不需要了解业务的具体技术细节,由于PetShop4.0中使用了接口类,使得对象的生成在一个容器中进行,也就是数据访问工厂类中,并且我们可以在这个类中进行对象的管理,从而节省了系统的句柄资源。

如果我们用一个生活中的例子来描述这个流程,就好比有一人家,家里面有N个闺女,父母对于每个闺女都制定了一套单子,上面罗列了出嫁的时候要陪嫁的东西,每个闺女的陪嫁种类都是一样的,但每种东西可能有好有差,比如都陪嫁电视机,大女儿的可能是20寸的,小女儿就是29寸的,HOHO。

陪嫁单细目就是IDAL,每一个闺女各自的罗列了具体陪嫁信息的陪嫁单则是DAL。随后有一人来家里面提亲,具体要提大女儿还是小女儿就是web.config中的配置信息;父母根据提亲的细节拿出来不同的陪嫁单的过程,就是数据访问工厂FactoryManagement通过反射生成IDAL;提亲的人可以通过陪嫁单(IDAL)获得一系列详细信息,比如陪嫁的电视机多大的,戒指有几个,这就是BLL层获取IDAL实例后执行不同的方法。

 
原创粉丝点击