深水池塘

记录学习过程,分享经验和心得

升级我的数据库辅助类(提供下载)

petshop通过抽象工厂实现了数据库的自由切换,但是我不喜欢这种方式。一是需要多建好几个项目,每一个数据库都要一个DAL和Help类。项目多了,代码量自然也多了,维护起来不方便,修改一个东西要改动好几个地方。

它是在DAL层面实现的数据库切换,几个Help没有什么联系,而且代码大量重复。为什么不在Help类里实现数据库里切换呢~这样只需要一个DAL,在配置文件里改一下,Help类就会返回不同数据库的对象供DAL使用。怎么实现呢,我想到了两种方式。

第一个自然是反射,使用System.Data.Common命名空间的类,代码如下:

Code

比较不好处理的是DbParameter,程序里用的是DbParameter数组,自然可以接受SqlParameter或OleDbParameter数组,可以像Petshop那样在外部构建一个SqlParameter数组传进来就行了。但是这样客户端就必须知道具体数据库的类型,没有达到封装的目的。我见yueue.ADOKeycap的处理方式不错,但是我的全是静态方法,不能这么搞,于是想了一个笨方法。做了一个类。

Code

这样就可以像这样调用了。

Code

这样改造之后应该就可以实现自由切换数据库了。只需修改一下配置文件就Ok。但是我却有点不安,因为在静态方法里使用了反射,每次调用都要反射一次(为了行文方便,这种方法我暂且称之为静态反射),会不会降低性能呢~

于是想到了另一个方法,使用策略模式。先写一个Help的abstract类:

Code