在写应用软件时,数据库访问模块是一个经常需要使用的东西,我们都知道DotNet Framework中的数据库访问就是ADO.NET。但是直接使用ADO.NET进行数据库访问会产生许多冗余的代码,很多的代码段都十分相似。那么我们就要对其进行2次封装(代码复用),也就是在ADO.NET之上搭建我们自己的数据库访问库。也许你已经接触过第三方的这种数据库访问库,比如微软企业库中的Data Block。这时,你的一个选择就是直接使用第三方的数据库访问库进行编码,但是这又会有一个问题,如果今后你想采用其它的第三方数据库访问库,那么就存在升级的问题,如何把原来的数据库访问库升级到新的数据库访问库,难道你会选择重新把数据库访问代码重写吗?
这时我们就需要有自己的数据库访问库, 也许我们的数据库访问库并没有作实质性的操作。
My Library通过采用适配器模式将实现委托于第三方数据库访问库,这样第三方数据库访问库的变更就不会影响到我们的数据库访问代码了。那么如何具体地搭建这样的一个My Library呢,下面我就简单的讲解一下。由于本人的能力有限,下面的讲解中定会有很多不合适的地方,但是我只想表达我的思想,具体的实现那就有很多的不同了。
Database就是数据库访问代码直接使用的类,它包含了许多操作,其实就是一个DbHelper的功能,但是要注意的是这些操作都是与具体数据库无关的,用的都是些抽象类,如DbComamnd、DbConnection、DbParameter等等,这样我们的数据库访问代码就会与具体数据库无关,这也是我想要表达的思想之一,面向接口编程,而非面向实例编程。这里还用到了一个模式:provider模式,这个模式在DotNet中被大量的采用,如Membership、SiteMap、...。其实在ADO.NET中也采用了这个模式,如果仔细研究过connectionStrings的配置,就会知道它也需要有Provider。
那Database如何被创建呢,这就需要有Factory,这又引入了一个模式:abstract factory。
一般的abstract factory模式中,我们不会把factory设置成抽象,而且以我原来的编程来说,我一般也是把factory写成单件模式。但是最近看了MS MVC,发现它的ControllerFacotry是可以进行替换的,这样facotry就变得更灵活了。那么我们如何来管理DatabaseFactory呢,我们引进了DatabaseManager。
当然我们也需要配置一些信息,如默认的connectionString配置、默认的DatabaseProvider、...。所以我们还有要有一个DatabaseSettings的ConfigurationSection。现在这个数据库访问库的框架已经搭建完成,接下来就要具体的实现了,我们需要实现DatabaseFactory、DatabaseProvider。为了便于大家理解Provider模式,我们就拿Membership来做对比,Membership类相当于Database类,MembershipSection类相当于DatabaseSettings类,MembershipProvider类相当于DatabaseProvider类。
接下来我们先看看一种实现,默认实现,不依靠第三方数据库访问库。
DefaultDatabaseProvider
那我们在来看看如何使用第三方数据库访问库,如微软企业库。
这样保证了数据库访问库升级时无需重写数据库访问代码。这个例子的重点在于说明我们为什么需要搭建自己的类库层,而不是在于如何搭建,要搭建一个可用的类库层是比较复杂的,但是这只是技术性的问题,我们需要提升的是思想,是解决方案,技术是不断发展,而且很快,但是思想和解决方案是不变的,就像GOF23设计模式,要实现它有很多的方式,但是它的思想,精髓是不变的。
希望对你有所帮助,Happing Coding!






}
}
浙公网安备 33010602011771号