最近公司做工商外资的项目,要求使用DB2数据库与Oracle数据库切换。需求是只要把webconfig中的配置一改就可以实现数据来源在DB2与Oracle之间切换。经过思考,觉得可以用抽象工厂来实现这一功能,后边仔细一想,感觉有点麻烦,后边想到了用反射来实现。思路是这样的:将数据访问层抽取出来,提取成接口DomeIDAL类库,再不同的数据库建立不同的数据访问层实现接口,如使用DB2话就对应有一个DB2的数据访问类库项目DBTwoDAL,里面的类对应实现DemoIDAL中的接口,oracle有OracleDAL数据访问类库对应,这样将不同的数据库的访问抽取出来。然后再见一个反射工厂DemoFactory,用来创建不同的数据访问对象,实现是这样的,在webconfig中配置要使用的数据访问层的程序集名称,如使用oracle的话,就配OracleDAL,然后在发射工厂中读webconfig配置,这样就能利用发射加载该程序集了,然后在BLL层中传对应的类名,让工厂来生产出该类的对象。这样就实现了只要在webconfig中配置好要使用的数据访问层的程序集名称,就能实现使用那个数据访问层来访问数据库了。这里要注意的是,DB2DAL与OracleDAL两类库中的类名必须都一样,这样BLL写好的类名才能在两项目中都能找到。我说的可能不好明白,代码上传,自己一看就OK了,这里我再提提这项目中各项目的引用(截图吧):
这个一看估计也懂,我只是提醒这一定要注意了,少引用了报错,多引用了,也没这个必要,也使项目变得混乱。
这里要注意了: 你的网站项目里一定要引用你数据访问接口的实现项目,如:DemoOracleDAL.dll和DemoSqlServerDAL.dll引用,因为反射创建对象是,在web项目的bin目录里查找这个dll的.如果不存在,就会报:“未能加载文件或程序集 ”XXX“ 或它的某一个依赖项。” 切记